gpt4 book ai didi

python - Tensorflow 多个 session.run( ) 在同一次迭代中

转载 作者:行者123 更新时间:2023-11-28 17:03:04 26 4
gpt4 key购买 nike

以下是 Tensorflow NN 训练部分的 2 个代码模式。

我发现使用模型 1 是合乎逻辑的。但我经常在多个地方看到模型 2。我觉得模型 2 是错误的。模型不会为相同数据的每次迭代在 session 中运行图形两次吗?是否有我遗漏的东西,而人们出于任何其他原因这样做?

模型 1

for epoch in range(epochs):
for iteration in range(num_tr_iter):
_, loss, accuracy = sess.run([optimizer, loss, accuracy], feed_dict)

模型 2

for epoch in range(epochs):
for iteration in range(num_tr_iter):
sess.run(optimizer, feed_dict)
loss, accuracy = sess.run([loss, accuracy],feed_dict)

编辑:为了更清楚,正在扩展问题

如果下面的 sess.run() 执行优化器节点,它将执行它的所有依赖节点。它还将运行底层的 convnet 和损失函数。

    sess.run(optimizer, feed_dict)

接下来,如果下面的 sess.run() 执行损失节点,为什么它不使用当前权重执行 convnet。我并不是在推断它会再次运行优化。就算是现在的loss,难道tensorflow不执行convnet计算loss吗?

        loss, accuracy = sess.run([loss, accuracy],feed_dict)

最佳答案

Session.Run 将只运行计算第一个参数中给定的图形元素。

所以在模型 2 中,sess.run(optimizer, feed_dict) 只是为模型应用权重更新,loss, accuracy = sess.run([loss, accuracy], feed_dict) 只是计算权重更新后模型的损失和准确度。整个计算不会运行两次,因为这些操作彼此独立。

请注意 Session.Run docs提到:

Order in which... operations are evaluated inside the call is undefined.

所以模型 1 甚至可能无法给出准确的损失和准确度,因为不清楚它是在权重更新之前还是之后测量的。 (不过实际上这可能没问题)

关于python - Tensorflow 多个 session.run( ) 在同一次迭代中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058311/

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