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)

直观地说,定义weightsLayer1biasesLayer1的行我认为只会在启动时执行一次,因为它们会初始化权重和偏差。 然而,我假定线路计算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?

下一篇: How to speedup rnn training speed of tensorflow?