Tensorflow:操作执行原理

基本原理

在TensorFlow中,所有的操作只有当你执行,或者另一个操作依赖于它的输出时才会运行。

运行op

构建图时不需要显示声明变量名,如

tf.concat(axis=1, values=initial_state, name="initial_state")

直接使用图中的name就可以运行了。

initial_state = sess.run(fetches="lstm/initial_state:0",
                         feed_dict={"case_feed:0": case_feature})

tensorflow会话session

TensorFlow会自动生成一个默认的计算图,如果没有特殊指定,运算会自动加入这个计算图中。TensorFlow中的会话也有类似的机制,但是TensorFlow不会自动生成默认的会话,而是需要手动指定。

       tf.Session()创建一个会话,当上下文管理器退出时会话关闭和资源释放自动完成。

       tf.Session().as_default()创建一个默认会话,当上下文管理器退出时会话没有关闭,还可以通过调用会话进行run()和eval()操作。

import tensorflow as tf

a = tf.constant([[3, 2, 7],
                 [2, 9, 8]])
print(a)
with tf.Session() as sess:
    print(sess.run(a))
    # print(a.eval()) #或者这样

输出:

Tensor("Const:0", shape=(2, 3), dtype=int32)
[[3 2 7]
 [2 9 8]]

Note: 直接print只会打印tensor信息,是没有数值的。参考[Tensorflow:输入输出]

import tensorflow as tf
a = tf.constant(1.0)
b = tf.constant(2.0)
with tf.Session().as_default() as sess:
   print(a.eval())   
print(b.eval(session=sess))
1.0
2.0

sess.run

sess.run()里面的执行顺序是按fetch列表中的元素,在计算图中的出现的先后顺序执行一次完后,最后统一输出,不会重复执行。即:fetch列表中的节点打乱时, 取出来的值依然是一次流程图计算出来的结果,不是按照fetch列表中出现的先后顺序执行。

m = tf.Variable(initial_value=2,dtype=tf.float32)
n = m+1
j = n+1
 
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run([m,j,n]))
————————————————

结果

[2.0,3.0,4.0]

-柚子皮-

from: -柚子皮-

ref:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值