簡體   English   中英

如何修復“AttributeError:模塊‘tensorflow’沒有屬性‘get_default_graph’”?

[英]How to fix "AttributeError: module 'tensorflow' has no attribute 'get_default_graph'"?

我正在嘗試運行一些代碼來創建 LSTM model 但出現錯誤:

AttributeError: module 'tensorflow' has no attribute 'get_default_graph'

我的代碼如下:

from keras.models import Sequential

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(LSTM(17))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

我發現其他人也有類似的問題,他們更新了 tensorflow 並且它有效; 但我的是最新的,但仍然無法正常工作。 我是使用 keras 和機器學習的新手,所以如果這很愚蠢,我深表歉意!

請試試:

from tensorflow.keras.models import Sequential

代替

from keras.models import Sequential

對於 tf 2.1.0,我使用了tf.compat.v1.get_default_graph() - 例如:

import tensorflow as tf
sess = tf.compat.v1.Session(graph=tf.compat.v1.get_default_graph(), config=session_conf)
tf.compat.v1.keras.backend.set_session(sess)

對於最新的 tensorflow 2,將上面的代碼替換為下面的代碼,並進行一些更改

有關詳細信息,請查看 keras 文檔: https ://www.tensorflow.org/guide/keras/overview

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
from tensorflow.keras.models import Sequential, load_model

model = tf.keras.Sequential()
model.add(layers.Dense(32, input_dim=784))
model.add(layers.Activation('relu'))
model.add(layers.LSTM(17))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.01), metrics=['accuracy'])

我有同樣的問題。 我試過了

from tensorflow.keras.models import Sequential

from keras.models import Sequential

它們都不起作用。 所以我更新了 tensorflow、keras 和 python:

$conda update python
$conda update keras
$conda update tensorflow

要么

pip install --upgrade tensorflow
pip install --upgrade keras
pip install --upgrade python

我的 tensorflow 版本是 2.1.0; 我的 keras 版本是 2.3.1; 我的 python 版本是 3.6.10。 在我卸載 keras 並重新安裝 keras 之前,什么都不起作用:

pip uninstall keras
pip install keras --upgrade

它是由於 tensorflow 版本的變化而發生的 :: Replace

tf.get_default_graph()

經過

tf.compat.v1.get_default_graph()

結果我使用了錯誤的版本 (2.0.0a0),所以我重置到最新的穩定版本 (1.13.1) 並且它可以工作。

更換所有keras.something.somethingtensorflow.keras.something和使用:

import tensorflow as tf
from tensorflow.keras import backend as k

降級將解決問題,但如果您想使用最新版本,則必須嘗試以下代碼: from tensorflow import keras和 ' from tensorflow.python.keras import backend as k這對我from tensorflow.python.keras import backend as k

使用以下內容:

tf.compat.v1.disable_eager_execution()
print(tf.compat.v1.get_default_graph())

它適用於 tensorflow 2.0

為了解決這個問題,我使用了下面的代碼:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
import numpy

是的,它不起作用,因為您使用的是 tensorflow 的更新版本,即 tensorflow == 2.0 ,舊版本的 tensorflow 可能會有所幫助。 我遇到了同樣的問題,但我使用以下代碼修復了它。

嘗試:

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Dropout

反而:

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout

Keras集成到TensorFlow 2.0中

下面的文章為我解決了這一問題。 關鍵點是:

  1. Keras包含在TensorFlow 2.0軟件包中
  2. 因此,無需在您的環境中安裝獨立的Keras軟件包
  3. 現在,前面提到的使用“ from tensorflow.keras ...”的解決方案才有意義。

認識到並做出更改后,我的代碼示例在此處和此處進行了一些小的更改。

https://www.pyimagesearch.com/2019/10/21/keras-vs-tf-keras-whats-the-difference-in-tensorflow-2-0/

這也發生在我身上。 原因是你的 tensorflow 版本。 嘗試獲取舊版本的 tensorflow。 另一個問題可能是您的項目中有一個名為 tensorflow.py 的 python 腳本。

是的,該代碼不適用於此版本的 tensorflow tensorflow == 2.0.0 。 遷移到 2.0.0 之前的版本會有所幫助。

假設人們參考此線程將使用越來越多的 tensorflow 2:

Tensorflow 2 進一步集成了 keras api,因為 keras 的設計/開發非常明智。 答案是如果你正在使用tensorflow 2非常容易,也說明這里

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, LSTM

model = Sequential()
model.add(Dense(32, input_dim=784))
model.add(Activation('relu'))
model.add(LSTM(17))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss=tensorflow.keras.losses.binary_crossentropy, optimizer=tensorflow.keras.optimizers.Adam(), metrics=['accuracy'])

這就是你如何改變一個人會使用來自keras官方頁面的MNIST之類的東西,只需替換tensorflow.keras而不是keras並在gpu上運行它;

from __future__ import print_function
import tensorflow
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, Flatten
from tensorflow.keras.layers import Conv2D, MaxPooling2D
from tensorflow.keras import backend as K

batch_size = 1024
num_classes = 10
epochs = 12

# input image dimensions
img_rows, img_cols = 28, 28

# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()

if K.image_data_format() == 'channels_first':
    x_train = x_train.reshape(x_train.shape[0], 1, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], 1, img_rows, img_cols)
    input_shape = (1, img_rows, img_cols)
else:
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
    input_shape = (img_rows, img_cols, 1)

x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')

# convert class vectors to binary class matrices
y_train = tensorflow.keras.utils.to_categorical(y_train, num_classes)
y_test = tensorflow.keras.utils.to_categorical(y_test, num_classes)

model = Sequential()
model.add(Conv2D(32, kernel_size=(3, 3),
             activation='relu',
             input_shape=input_shape))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes, activation='softmax'))

model.compile(loss=tensorflow.keras.losses.categorical_crossentropy,
          optimizer=tensorflow.keras.optimizers.Adadelta(),
          metrics=['accuracy'])

model.fit(x_train, y_train,
      batch_size=batch_size,
      epochs=epochs,
      verbose=1,
      validation_data=(x_test, y_test))
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

對於 TensorFlow 2.0,請使用與 tensorflow 捆綁的 keras。

嘗試更換keras.modelstensorflow.python.keras.modelstensorflow.keras.models

from tensorflow.python.keras.models import Sequential

from tensorflow.python.keras.layers.core import Dense, Activation

這應該可以解決問題。

!pip uninstall tensorflow 
!pip install tensorflow==1.14

這對我有用……在 hrnetv2 上工作……ty

這對我有用。 請使用以下導入

from tensorflow.keras.layers import Input

要解決 TensorFlow 中的版本問題,最好使用以下技術導入 v1(版本 1 或 TensorFlow 1.x),我們還可以禁用 TensorFlow 2.x 行為。

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

可以參考以下鏈接查看Tensorflow 1.x和2.x的映射關系

請盡量簡潔!

首先-->

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers

然后-->

model = keras.Sequential(
    [
        layers.Dense(layers.Dense(32, input_dim=784)),
        layers.Dense(activation="relu"),
        layers.Dense(LSTM(17))

    ]
)
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=tf.keras.optimizers.Adam(0.01), metrics=['accuracy'])

瞧!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM