Skip to main content
 首页 » 编程设计

python之如何在不更新 tensorflow 模型的情况下计算损失

2025年02月15日25shihaiming

据我了解,下面的代码将同时计算模型中的损失和更新参数。

_, 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是更新之后的损失值模型。