Tensorflow:图形生成后执行哪些图形语句?
在Tensorflow中,图形定义块中的哪些语句仅用于构建图形,哪些在训练期间执行? 例如:
with tf.Graph().as_default():
weightsLayer1 = tf.Variable(tf.truncated_normal([nInputUnits, nOutputUnits]))
weightsLayer1 = tf.div(weightsLayer1, tf.sqrt(tf.to_float(nInputUnits)))
biasesLayer1 = tf.Variable(tf.zeros([nUnitsHiddenLayer1]))
layer1output = tf.tanh(tf.matmul(images_placeholder, weightsLayer1) + biasesLayer1)
直观地说,定义weightsLayer1
和biasesLayer1
的行我认为只会在启动时执行一次,因为它们会初始化权重和偏差。 然而,我假定线路计算layer1output
1输出在每个训练步骤执行,因为layer1output
被用于下游计算损失,优化程序将其最小化。 那么,Tensorflow在训练期间如何知道只执行最后一行而不是之前的行(这会重新初始化权重和偏差)?
你作为用户实际上在告诉tensorflow要运行哪些操作。 在培训期间,您通常会通过tensorflow来执行优化程序提供的操作。 这看起来像这样:
opt = tf.train.GradientDescentOptimizer(0.01)
train_step = opt.minimize(loss) #
for i in range(100):
sess.run(train_step, feed_dict=...)
调用opt.minimize
会在计算图中添加可训练变量的梯度以及使用梯度更新变量的操作。 train_step
实际上是使用tf.group
分组的这些更新操作。 如果您(用户)运行train_step
,tensorflow会计算出为执行这些所需操作而需要运行的计算图表的哪些部分。
同样,如果您执行诸如sess.run(fetches=loss, feed_dict=...)
,则您正在要求tensorflow执行图中所有必须计算loss
。
最后,初始化操作像在weightsLayer1 = tf.Variable(tf.truncated_normal([nInputUnits, nOutputUnits]))
通常是通过运行sess.run(tf.initialize_all_variables())
编辑:重新阅读你的问题后,我想更清楚一个方面。 您提供的图形定义代码实际上没有执行任何操作。 当且仅当您开始一个会话并请求执行图形的某些部分时才执行Tensorflow操作。 如上所述,这包括初始化操作。
链接地址: http://www.djcxy.com/p/32121.html上一篇: Tensorflow: Which graph statements are executed after the graph is built?