Python Tensorflow多个会话。在同一迭代中运行()

Python Tensorflow多个会话。在同一迭代中运行(),python,tensorflow,neural-network,Python,Tensorflow,Neural Network,以下是Tensorflow NN训练部分的两种代码模式 我发现使用模型1是合乎逻辑的。但我经常在多个地方看到模型2。我觉得模式2是错误的。对于相同的数据,模型会在会话中为每次迭代运行两次图吗?有没有我遗漏了什么,人们会因为其他原因而这样做 模式1 for epoch in range(epochs): for iteration in range(num_tr_iter): _, loss, accuracy = sess.run([optimizer, loss, ac

以下是Tensorflow NN训练部分的两种代码模式

我发现使用模型1是合乎逻辑的。但我经常在多个地方看到模型2。我觉得模式2是错误的。对于相同的数据,模型会在会话中为每次迭代运行两次图吗?有没有我遗漏了什么,人们会因为其他原因而这样做

模式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()执行optimizer节点,它将执行其所有依赖节点。它还将运行基础convnet和loss函数

    sess.run(optimizer, feed_dict)
接下来,如果下面的sess.run()执行loss节点,为什么不使用当前权重执行convnet呢。我不是在推断它会再次运行优化。即使要计算当前损耗,tensorflow是否会执行convnet并计算损耗

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

在模型2中,第一行代码在模型上运行优化器,第二行计算损失和精度。它不会运行图形两次


模型1和模型2本质上是相同的,但为了简洁起见,点指向模型1。

会话。Run
将仅运行计算第一个参数中给定的图形元素

因此,在模型2中,
sess.run(optimizer,feed\u dict)
只对模型应用权重更新,而
loss,accurity=sess.run([loss,accurity],feed\u dict)
只在权重更新后计算模型的损耗和精度。整个计算不会运行两次,因为这些操作彼此独立

请注意,Session.Run中提到:

顺序是。。。在未定义的调用中计算操作


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

在模型1中,optimizer是sess.run()的第一个获取。在这种情况下,我们对模型1也很好吗?根据文档,我不认为我们可以假设
optimizer
是首先评估的,因为它是列表中的第一个。不过,正如我上面所说,实际上可能是这样的——我对
Session.Run
的内部结构了解不够。