tensorflow 无法执行sess =tf .session ()_如何在TensorFlow 2 中执行TensorFlow 1.X 代码

本文介绍了如何在TensorFlow2环境下使用`tensorflow.compat.v1`来执行TensorFlow1.x的图执行模式代码。通过一个简单的两数相加案例展示了如何建立计算图、创建会话并执行计算,强调了在图执行模式中张量的值是在会话中计算得出的。
摘要由CSDN通过智能技术生成

1. TensorFlow 2 实现图执行模式开发

6e2b7476ba4506ff2b4f039d9e7cf51d.gif

TensorFlow 2 虽然和TensorFlow 1.X有较大差异,不能直接兼容TensorFlow 1.X代码。但实际上还是提供了对TensorFlow 1.X 的 API支持。原有的TensorFlow 1.X 的 API整理到tensorflow.compat.v1包里去了。因此TensorFlow 2 中执行或者开发TensorFlow 1.X代码,可以做如下处理:

1、导入TensorFlow时使用 import tensorflow.compat.v1 as tf 代替import tensorflow as tf;

2、执行tf.disable_eager_execution() 禁用TensorFlow 2默认的即时执行模式。

2. TensorFlow 1.x 图执行模式编程案例

6e2b7476ba4506ff2b4f039d9e7cf51d.gif

这里以计算2个数相加的简单案例作为示例,通过 TensorFlow 1.X 的图执行模式API实现计算。

体验案例:计算两数之和

  • 建立计算图

首先导入tensorflow.compat.v1,禁用即时执行模式:

# 在TensorFlow 2下执行TensorFlow 1.x版本代码

import tensorflow.compat.v1 as tf

tf.disable_eager_execution()   # 改为图执行模式运行

以下三行代码定义了一个简单的计算图:

# 定义了一个简单的“计算图”

node1 = tf.constant(3.0,tf.float32,name="node1")

node2 = tf.constant(4.0,tf.float32,name="node2")

node3 = tf.add(node1, node2)

由于是图执行模式,这时仅仅是建立了计算图,但它并没有执行。执行以下语句:

node1,node2,node3

结果显示如下:

('node1:0' shape=() dtype=float32>,'node2:0' shape=() dtype=float32>, 'Add:0' shape=() dtype=float32>)

        可以看到,无论是前面定义的2个常量还是add操作的结果都是张量,但在输出的张量结构中都没有具体的值。需要注意的是:在静态计算图执行编程模式时,张量这时并没有真正保存数值,它保存的只是计算过程。

        此处张量属性的第一项就是名字(name),一般形式为“node:src_output”,node表示节点名称,src_output 来自节点的第几个输出。本例node3节点名称是“add”,因为在定义add操作时没有给name属性赋值,这个名称是系统根据操作节点自动命名的。

        这个计算图可以通过TensorBoard可视化工具进行查看,图形如图2.1所示。有关TensorBoard的具体应用将在后面结合案例讲解。

16f88034953b248c5397b3323260771e.png

图2.1 简单的计算图

  • 执行计算图

定义好计算图后,需要建立一个会话(Session),使用会话对象来实现计算图的执行。

sess = tf.Session()    # 建立对话并显示运行结果

print("运行sess.run(node1)的结果:", sess.run(node1))print("运行sess.run(node2)的结果:", sess.run(node2))print("运行sess.run(node3)的结果:", sess.run(node3))
sess.close()     # 关闭session

以上代码运行的结果如下:

运行sess.run(node1)的结果: 3.0
运行sess.run(node2)的结果: 4.0
运行sess.run(node3)的结果 7.0

    通过以上示例可以看出,在TensorFlow 1.X图执行模式中,不像在TensorFlow 2即时执行模式下能直接返回张量的值,而是首先要创建一个静态的计算图模型,然后再建立会话,在会话中执行操作后才将能得到张量的值。

阅读原文?直接进入课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值