在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
在下游用于计算损失,优化器将其最小化 . 那么,Tensorflow在训练期间如何知道只执行最后一行而不是之前的行(这会重新初始化权重和偏差)?
1 回答
您作为用户实际上正在告诉tensorflow要运行哪些操作 . 在训练期间,您通常会告诉tensorflow执行优化程序提供的操作 . 这看起来像这样:
调用
opt.minimize
会在计算图中添加渐变w.r.t.可训练变量以及使用渐变更新变量的操作 .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操作 . 如上所述,这包括初始化操作 .