TensorFlow之获取并执行Operation对象

代码:

import tensorflow as tf

# 定义变量Tensor对象
A_tf = tf.Variable([[1, 1], [1, 1]], dtype=tf.float32)
# 为A_tf做赋值操作
A_tf.assign(A_tf+1)
# 获取当前图
graph = tf.get_default_graph()
# 获取当前图中所有的Operation并打印
ops = graph.get_operations()
print(ops)
# 找到初始化Operation
init_op = graph.get_operation_by_name('Variable/Assign')
with tf.Session() as sess:
    # 执行初始化操作
    sess.run(init_op)
    # 取出变量值
    print(sess.run(A_tf))

上面代码中,第10行获得了当前所有的Operation对象,第13行中根据查找到的Operation对象列表找出了初始化操作Operation对象,在第16行中执行了初始化操作。执行上述代码,输出结果如下:

[<tf.Operation 'Variable/initial_value' type=Const>, <tf.Operation 'Variable' type=VariableV2>, <tf.Operation 'Variable/Assign' type=Assign>, <tf.Operation 'Variable/read' type=Identity>, <tf.Operation 'add/y' type=Const>, <tf.Operation 'add' type=AddV2>, <tf.Operation 'Assign' type=Assign>]

[[1. 1.]
 [1. 1.]]

我们发现,虽然取出了A_tf的值,但貌似并未执行上述代码中第6行的Assign赋值操作。之前我们解释过,第6行代码仅仅是一个Operation操作,这个操作并不在执行的路径中,需要手动执行这个赋值Operation对象,修改上述代码如下:

import tensorflow as tf

# 定义变量Tensor对象
A_tf = tf.Variable([[1, 1], [1, 1]], dtype=tf.float32)
# 为A_tf做赋值操作
A_tf.assign(A_tf+1)
# 获取当前图
graph = tf.get_default_graph()
# 获取当前图中所有的Operation并打印
ops = graph.get_operations()
print(ops)
# 找到初始化Operation
init_op = graph.get_operation_by_name('Variable/Assign')
add_op = graph.get_operation_by_name("Assign")
with tf.Session() as sess:
    # 执行初始化操作
    sess.run(init_op)
    # 取出变量值
    print(sess.run(A_tf))
    # 执行赋值操作
    sess.run(add_op)
    # 取出变量赋值后的值
    print(sess.run(A_tf))

输出:

[<tf.Operation 'Variable/initial_value' type=Const>, <tf.Operation 'Variable' type=VariableV2>, <tf.Operation 'Variable/Assign' type=Assign>, <tf.Operation 'Variable/read' type=Identity>, <tf.Operation 'add/y' type=Const>, <tf.Operation 'add' type=AddV2>, <tf.Operation 'Assign' type=Assign>]

[[1. 1.]
 [1. 1.]]
[[2. 2.]
 [2. 2.]]
发布了105 篇原创文章 · 获赞 17 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_38890412/article/details/104124698