据我了解,下面的代码将同时计算模型中的损失和更新参数。
_, c = sess.run([optimizer, loss], feed_dict={x:x, y:y})
那么如何在不更新模型的情况下计算损失呢?
_, c1 = sess.run([optimizer, loss], feed_dict={x:x, y:y})
_, c2 = sess.run([optimizer, loss], feed_dict={x:x, y:y})
例如,c1 != c2 因为第一行更新了模型。
更新1
我试过下面的代码,只是在没有optimizer
c1 = sess.run([loss], feed_dict={x:x, y:y})
c2 = sess.run([loss], feed_dict={x:x, y:y})
但是c1还是不等于c2
更新2
我模型中的 dropout 层导致我的 UPDATE1 中的 c1 和 c2 不同
请您参考如下方法:
要在不更新模型的情况下计算损失,只需运行 loss 操作,无需 optimizer 操作。
c = sess.run(loss, feed_dict={x:x, y:y})
请注意,当您运行 sess.run([optimizer, loss], feed_dict={x:x, y:y}) 时,您会在 之前获得损失值应用更新,所以运行:
_, c1 = sess.run([optimizer, loss], feed_dict={x:x, y:y})
c2 = sess.run(loss, feed_dict={x:x, y:y})
仍然会产生c1和c2的不同值,因为c2是更新之后的损失值模型。
