首页 文章

Tensorflow:构建图形后执行哪些图形语句?

提问于
浏览
2

在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 在下游用于计算损失,优化器将其最小化 . 那么,Tensorflow在训练期间如何知道只执行最后一行而不是之前的行(这会重新初始化权重和偏差)?

1 回答

  • 2

    您作为用户实际上正在告诉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 会在计算图中添加渐变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操作 . 如上所述,这包括初始化操作 .

相关问题