Tensorflow会话

        会话 提供了估算张量和执行操作的运行环境,它是发放计算任务的客户端,所有计算任务都由它链接的执行引擎完成。一个会话的典型使用流程分为以下3步:

#1.创建会话
sess = tf.Session(target=...,graph=...,config=...)
#2.估算张量或执行操作
sess.run(...)
#3.关闭会话
sess.close()
参数名称功能说明
target会话连接的执行引擎
graph会话加载的数据流图
config会话启动时的配置项

刚学的时候一般都时缺省设置参数,并没有给这三个参数赋值,直接

sess = tf.Session()

或者

with tf.Session() as sess:

例子:

(1)

import tensorflow as tf
#创建数据流图:z = x *  y
#tf.compat.v1.disable_eager_execution()
x = tf.placeholder(tf.float32,name='x')
y = tf.placeholder(tf.float32,name='y')
z = tf.multiply(x,y,name='z')
#创建会话
sess = tf.Session()
#向数据节点x和y分别填充浮点数3.0和2.0,并输出结果
print(sess.run(z,feed_dict={x : 3.0,y : 2.0}))

 运行结果:(因为我装的时tensorflow2.0,1.0的有些函数使用方法有一点变化。)

 (2)

import tensorflow as tf
#创建数据流图:c = a +  b
a = tf.constant(1.0,name='a')#constant常量操作,不需要初始化就能得到对应的值
b = tf.constant(2.0,name='b')
c = tf.add(a,b,name='c')
#创建会话
sess = tf.Session()
#估算张量c的值
print(sess.run(c))

 之前一直用的会话sess.run()获取数据流图中的张量值,其实还有张量这个类本身有个估算方法:估算张量(Tensor.eval),所有的操作也有这么一个对应的方法叫(Operation.run)。看下面例子:

import tensorflow as tf
#创建数据流图:y = W *  x + b,其中W和b为存储节点,x为数据节点。
x = tf.placeholder(tf.float32)#占位符操作
W = tf.Variable(1.0)#定义变量
b = tf.Variable(1.0)
y = W * x + b
with tf.Session() as sess:
                tf.global_variables_initializer().run()#Operation.run()#初始化变量W和b,在执行sess后W和b其实被真正意义上赋予值1.0
                fetch = y.eval(feed_dict={x:3.0})#Tensor.eval
                print(fetch)

 tf.global_variables_initializer().run()#Operation.run()#初始化变量W和b,在执行sess后W和b其实被真正意义上赋予值1.0。这里也没有用之前的sess.run(tf.global_variables_initializer())来初始化变量,而是直接使用了这个操作的.run()方法。

对比该例子:

#获取张量值的另外两种方法:估算张量(Tensor.eval)与执行操作(Operation.run)
import tensorflow as tf
#创建数据流图:y = W *  x + b,其中W和b为存储节点,x为数据节点。
x = tf.compat.v1.placeholder(tf.float32)
W = tf.Variable(1.0)
b = tf.Variable(1.0)
y = W * x + b
with tf.compat.v1.Session() as sess:
                sess.run(tf.compat.v1.global_variables_initializer())
                print(sess.run(y,feed_dict={x : 3.0}))

 

TensorFlow 会话执行原理


当我们调用sess.run(train op)语向执行训练操作时:
• 首先,程序内部提取操作依赖的所有前置操作。这些操作的节点共同组成一幅子图。


•然后,程序会将子图中的计算节点、存储节点和数据节点按照各自的执行设备分类,相同设备上的节点组成了一幅局部图。


•最后,每个设备上的局部图在实际执行时,根据节点间的依赖关系将各个节点有序地加载到设备上执行。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟1号!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值