tensorflow2.0及以上版本在使用Session模块时报错:AttributeError: module ‘tensorflow‘ has no attribute ‘Session‘ 已解决

tensorflow2.0版本及之后的版本在使用Session模块时报错:AttributeError: module ‘tensorflow’ has no attribute ‘Session’
AttributeError: module 'tensorflow' has no attribute 'Session'
错误的意思是tensortflow模块没有Session属性,后来查阅资料发现,tensorflow2.0版本中的确没有Session这个属性。
如果安装的是tensorflow2.0版本又想利用Session属性,可以在tf.Session()文件头添加导入模块处,将import tensorflow as tf更改为:

import tensorflow.compat.v1 as tf

就可以正常运行了。

如果运行后出现如下错误:
RuntimeError: tf.placeholder() is not compatible with eager execution.
查阅资料发现,原因是2.0与1.0版本不兼容。这是因为在运行**tf.compat.v1.placeholder(dtype, shape = None, name = None)**的时候急切执行了这条语句,但是我们一般都是在一个Session前先去定义placeholder,但是不会去执行,然后再在Sesion上下文管理器中去传入我们的数据,然后执行。
tensorflow的官网对disable_eager_execution()方法是这样解释的:
翻译过来为:此函数只能在创建任何图、运算或张量之前调用。它可以用于从TensorFlow 1.x到2.x的复杂迁移项目的程序开头。这里给出一个方法(对我有效)

在程序开始部分添加以下代码:

tf.compat.v1.disable_eager_execution()

例子
Error

import tensorflow as tf
import numpy as np
# tf.compat.v1.disable_eager_execution()
x = tf.compat.v1.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)

with tf.compat.v1.Session() as sess:
    print(sess.run(y))

    # rand_array = np.random.rand(1024, 1024)
    # print(sess.run(y, feed_dict={x: rand_array}))

Correct

import tensorflow as tf
import numpy as np
tf.compat.v1.disable_eager_execution()
x = tf.compat.v1.placeholder(tf.float32, shape=(1024, 1024))
y = tf.matmul(x, x)

with tf.compat.v1.Session() as sess:
    # print(sess.run(y))

    rand_array = np.random.rand(1024, 1024)
    print(sess.run(y, feed_dict={x: rand_array}))

参考资料:
1、eager execution not working with placeholders #18165

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值