如何修复“AttributeError: module 'tensorflow' has no attribute 'get_default_graph'”?

58

我正在尝试运行一些代码来创建一个LSTM模型,但是我遇到了一个错误:

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后问题解决了;但是我的tensorflow已经是最新版本,仍然无法解决。我刚开始使用keras和机器学习,如果这个问题很傻的话,请原谅!

20个回答

48
请尝试:

from tensorflow.keras.models import Sequential

而不是

from keras.models import Sequential


23

对于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)


13

要使用最新的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'])

12

由于tensorflow版本变化而发生 :: 请更换

tf.get_default_graph()
tf.compat.v1.get_default_graph()

6

我有同样的问题。我尝试过

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

5

结果发现我使用的是错误版本(2.0.0a0),因此我重置到最新的稳定版本(1.13.1),然后它就能正常工作了。


1
这不是一个解决方案,你回到了早期版本的keras并使用了那个版本的实现。@irezwi的答案是在tf 2.0中有效的。 - MuhsinFatih
2
只是为了增加一点解释:TensorFlow 2.0内置了Keras;无需将Keras单独加载到您的环境中;只需像@irezwi所示更改导入语句即可。 - jhughs

4

将所有的keras.something.something替换为tensorflow.keras.something,并使用:

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

3
使用以下内容:
tf.compat.v1.disable_eager_execution()
print(tf.compat.v1.get_default_graph())

它适用于tensorflow 2.0


1
!pip uninstall tensorflow 
!pip install tensorflow==1.14

这对我有用...正在处理hrnetv2..谢谢

1
降级可以解决问题,但如果您想使用最新版本,您必须尝试此代码:from tensorflow import keras 和 'from tensorflow.python.keras import backend as k'。这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接