Tensorflow 2.0 - AttributeError: module '没有属性'

当我在Tensorflow 2.0环境中执行命令sess = tf.Session()时,我得到一个错误消息,如下所示:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'tensorflow' has no attribute 'Session'

系统信息:

  • 操作系统平台及发行版本:Windows 10
  • Python版本:3.7.1
  • Tensorflow版本:2.0.0-alpha0(已安装pip)

复制步骤:

安装:

  1. PIP安装——升级PIP
  2. PIP install tensorflow==2.0.0-alpha0
  3. PIP安装keras
  4. PIP install numpy==1.16.2

执行:

  1. 执行命令:import tensorflow as tf
  2. 执行命令:sess = tf.Session()
417696 次浏览

根据TF 1:1 Symbols Map,在TF 2.0中你应该使用tf.compat.v1.Session()而不是tf.Session()

https://docs.google.com/spreadsheets/d/1FLFJLzg7WNP6JHODX5q8BDgptKafq_slHpnHVbJIteQ/edit#gid=0

得到TF 1。在TF 2.0中可以运行类似x的行为

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

,但这样就不能从TF 2.0的许多改进中受益。更多细节请参考迁移指南 https://www.tensorflow.org/guide/migrate < / p >

我在安装windows10 + python3.7(64bit) + anacconda3 + jupyter notebook.后第一次尝试python时遇到了这个问题

我通过引用“https://vispud.blogspot.com/2019/05/tensorflow200a0-attributeerror-module.html”来解决这个问题。

我同意

我相信“Session()”已经在TF 2.0中被删除了。

我插入了两行。一个是tf.compat.v1.disable_eager_execution(),另一个是sess = tf.compat.v1.Session()

我的Hello.py如下:

import tensorflow as tf


tf.compat.v1.disable_eager_execution()


hello = tf.constant('Hello, TensorFlow!')


sess = tf.compat.v1.Session()


print(sess.run(hello))

如果这是你的代码,正确的解决方案是重写它不使用Session(),因为在TensorFlow 2中不再需要Session()

如果这只是你正在运行的代码,你可以通过运行降级到TensorFlow 1

pip3 install --upgrade --force-reinstall tensorflow-gpu==1.15.0

(或任何最新版本的TensorFlow 1是)

TF2在默认情况下运行Eager Execution,从而消除了对session的需求。如果你想运行静态图形,更合适的方法是在TF2中使用tf.function()。虽然在TF2中Session仍然可以通过tf.compat.v1.Session()访问,但我不鼓励使用它。通过比较hello worlds中的差异可能有助于演示这种差异:

TF1。X你好世界:

import tensorflow as tf
msg = tf.constant('Hello, TensorFlow!')
sess = tf.Session()
print(sess.run(msg))

TF2。X你好世界:

import tensorflow as tf
msg = tf.constant('Hello, TensorFlow!')
tf.print(msg)

有关更多信息,请参见有效的TensorFlow

使用Anaconda + Spyder (Python 3.7)

(代码)

import tensorflow as tf
valor1 = tf.constant(2)
valor2 = tf.constant(3)
type(valor1)
print(valor1)
soma=valor1+valor2
type(soma)
print(soma)
sess = tf.compat.v1.Session()
with sess:
print(sess.run(soma))

[控制台]

import tensorflow as tf
valor1 = tf.constant(2)
valor2 = tf.constant(3)
type(valor1)
print(valor1)
soma=valor1+valor2
type(soma)
Tensor("Const_8:0", shape=(), dtype=int32)
Out[18]: tensorflow.python.framework.ops.Tensor


print(soma)
Tensor("add_4:0", shape=(), dtype=int32)


sess = tf.compat.v1.Session()


with sess:
print(sess.run(soma))
5

对于TF2.x,你可以这样做。

import tensorflow as tf
with tf.compat.v1.Session() as sess:
hello = tf.constant('hello world')
print(sess.run(hello))

>>> b'hello world

TF v2.0支持Eager模式相对于v1.0的Graph模式。因此,2.0版本不支持tf.session()。因此,建议您重写代码以在Eager模式下工作。

Tensorflow 2。x支持的热切执行默认情况下,因此会话不支持。

import tensorflow as tf
sess = tf.Session()

这段代码在版本2.x上会显示一个属性错误

使用版本1。版本2.x中的X代码

试试这个

import tensorflow.compat.v1 as tf
sess = tf.Session()

同样的问题也发生在我身上

import tensorflow as tf
hello = tf.constant('Hello World ')
sess = tf.compat.v1.Session()    *//I got the error on this step when I used
tf.Session()*
sess.run(hello)

尝试用tf.compact.v1.Session()替换它

当我更新Windows 10后第一次尝试谷歌Colab时,我也面临同样的问题。然后我改了一下,插入了两行,

  • tf.compat.v1.disable_eager_execution()
  • sess = tf.compat.v1.Session()

结果,一切都很顺利

用这个:

sess = tf.compat.v1.Session()

如果出现错误,请使用以下方法

tf.compat.v1.disable_eager_execution()
sess = tf.compat.v1.Session()

如果你在做这件事的时候,

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

那么我建议你遵循这些步骤,
注:对于TensorFlow2和CPU进程仅
步骤1:告诉你的代码就像编译器是TF1一样,并禁用TF2行为,使用以下代码:

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

步骤2:当导入库时,提醒你的代码,它必须像TF1一样,yes EVERYTIME.

tf.disable_v2_behavior()
from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np
结论:这应该工作,让我知道如果有什么问题,也如果它是GPU,那么一定要提到为keras添加后端代码。此外,TF2不支持会话,对此有单独的理解,TensorFlow上已经提到过,链接是:

TensorFlow TF2中使用会话的页面

其他主要的TF2变化已经在这个链接中提到,它很长,但请通过它,使用Ctrl+F协助。链接,

Effective TensorFlow 2 Page Link < / p >
import tensorflow._api.v2.compat.v1 as tf
tf.disable_v2_behavior()

对于Tensorflow 2.0及以后版本,试试这个。

import tensorflow as tf


tf.compat.v1.disable_eager_execution()


a = tf.constant(5)
b = tf.constant(6)
c = tf.constant(7)
d = tf.multiply(a,b)
e = tf.add(c,d)
f = tf.subtract(a,c)


with tf.compat.v1.Session() as sess:
outs = sess.run(f)
print(outs)
运行TF 1并不像你想的那么容易。x和TF 2。x环境我发现了一些错误,需要审查一些变量的使用,当我在互联网上修复神经元网络的问题。转换为TF 2。X是更好的主意。 (更容易和自适应)

TF - 2。X

while not done:
next_obs, reward, done, info = env.step(action)
env.render()
img = tf.keras.preprocessing.image.array_to_img(
img,
data_format=None,
scale=True
)
img_array = tf.keras.preprocessing.image.img_to_array(img)
predictions = model_self_1.predict(img_array) ### Prediction


### Training: history_highscores = model_highscores.fit(batched_features, epochs=1 ,validation_data=(dataset.shuffle(10))) # epochs=500 # , callbacks=[cp_callback, tb_callback]

TF - 1。X

with tf.compat.v1.Session() as sess:
saver = tf.compat.v1.train.Saver()
saver.restore(sess, tf.train.latest_checkpoint(savedir + '\\invader_001'))
train_loss, _ = sess.run([loss, training_op], feed_dict={X:o_obs, y:y_batch, X_action:o_act})
    

for layer in mainQ_outputs:
model.add(layer)
model.add(tf.keras.layers.Flatten() )
model.add(tf.keras.layers.Dense(6, activation=tf.nn.softmax))
predictions = model.predict(obs) ### Prediction


    

### Training: summ = sess.run(summaries, feed_dict={X:o_obs, y:y_batch, X_action:o_act})

样本变换TF 1。X到TF 2。X,只有你在样本中看到“/></a> .</p></div>
                                                                            </div>
                                </div>
                            </div>
                        </div>
                                            </div>
                </div>

                <br/>
                <div class=