据我所知,定义图的第一部分应该只使用TensorFlow函数编写。如果您想添加一些python,应该将它从图中分离出来,并通过占位符(tf.placeholder)添加。在
另一方面,在tf.Session()部分,您将通过sess.run()调用图形结果,提供feed_dict值(python对象,主要是数组)。然后,您得到的结果将是python对象,因此python解释器将在这里完成这项工作。在
总结一下:在第一部分中,您定义了TensorFlow图(由TensorFlow编译)。这就是所有重微积分的地方。在
在第二部分中,您运行的代码在Python中,但是通过sess.run()调用TensorFlow图,它由TensorFlow运行(应该包含大部分微积分)
更新
为了回答您更新的问题,您应该尽可能使用TensorFlow函数进行所有计算(因为这样会更快)。现在,如果您需要执行一些在TensorFlow中无法完成的计算,唯一的方法是调用sess.run()并使用占位符将值反馈回图中。在
这是一个最后的办法,因为与TensorFlow实现相比,它将非常慢!在loss = tf.constant(0.5) # in the TensorFlow graph
# Now you want to do some computations in Python, and obtain the value loss_bis
loss_bis = tf.placeholder(tf.float32, [])
res = ... # the TensorFlow graph continues
with tf.Session() as sess:
loss_value = sess.run(loss)
# PYTHON COMPUTATIONS
loss_bis_value = something_complicated_and_impossible_in_tf(loss_value)
sess.run([...], feed_dict={loss_bis=loss_bis_value})