gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:24:37 25 4
gpt4 key购买 nike

在 Tensorflow 中,图定义 block 中的哪些语句仅用于构建图,哪些语句在训练期间执行?例如:

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 的行在每个训练步骤都执行,因为 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 将梯度 w.r.t 添加到计算图中。可训练变量以及使用梯度更新变量的操作。 train_step 实际上是这些更新操作使用 tf.group 分组。如果您(用户)运行 train_step,tensorflow 会计算出它需要运行计算图的哪些部分才能执行这些所需的操作。

同样,如果您执行 sess.run(fetches=loss, feed_dict=...) 之类的操作,您是在要求 tensorflow 执行计算 所需的图中所有操作>损失

最后,weightsLayer1 = tf.Variable(tf.truncated_normal([nInputUnits, nOutputUnits])) 中的初始化操作通常由 sess.run(tf.initialize_all_variables( ))

编辑:重新阅读您的问题后,我想更清楚地了解一个方面。您提供的图形定义代码实际上没有执行任何操作。当且仅当您启动 session 并请求执行部分图形时,才会执行 Tensorflow 操作。如上所述,这包括初始化操作。

关于Tensorflow:构建图形后执行哪些图形语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37932230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com