python - 同一迭代中的 TensorFlow 多个 session.run()
问题描述
以下是 Tensorflow NN 训练部分的 2 个代码模式。
我发现使用模型 1 是合乎逻辑的。但我经常在多个地方看到模型 2。我觉得 Model 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() 执行优化器节点,它将执行其所有依赖节点。它还将运行底层的卷积网络和损失函数。
sess.run(optimizer, feed_dict)
接下来如果下面的 sess.run() 执行损失节点,为什么它不使用当前权重执行卷积网络。我并不是在推断它会再次运行优化。就算要得出当前的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文档提到:
在调用内部评估...操作的顺序是未定义的。
因此,模型 1 甚至可能不会给出准确的损失和准确度,因为不清楚它是在权重更新之前还是之后测量的。(实际上,这可能没问题)
推荐阅读
- python - 将所有XML文件转换为python文件夹中的JSON文件?
- android - 辅助功能服务单击自定义视图不起作用(performClick 未覆盖)
- php - 使用 Amazon RDS MySQL 数据库托管在 Heroku 上的 Laravel 应用程序导致连接超时
- angular - 使用 PrimNG TurboTable 和 Angular 6 获取索引
- python - django模型字段的不同setter和getter
- php - PHP在循环内提交表单后检索先前的值
- c - 通过 2D 矩阵 Bubble-Sort C
- dependency-injection - 尝试在不使用某个食谱的依赖项的情况下运行 Chef-client
- ngrx - @ngrx 动作被无限调用并带有效果
- google-apps-script - 从gs中的函数返回值到html