Python 如何在不更新tensorflow模型的情况下计算损耗

Python 如何在不更新tensorflow模型的情况下计算损耗,python,tensorflow,Python,Tensorflow,据我所知,下面的代码将同时计算损失和更新模型中的参数 _, 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 我

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

_, 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 我已经尝试了下面的代码,只是在没有优化器的情况下运行

c1 = sess.run([loss], feed_dict={x:x, y:y})
c2 = sess.run([loss], feed_dict={x:x, y:y})
但c1仍然不等于c2

更新2
我的模型中的退出层会导致我的
UPDATE1

中c1和c2的差异来计算损失,而无需更新模型,只需运行
loss
操作,无需
优化器
操作

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

感谢您的快速响应,我刚刚更新了我的问题以供您回答。不要使用
,c1
,只需使用
c1
@Akhilesh updated,很抱歉typo@Akhilesh事实上它应该是
c1、
(带逗号)或
c1
(不带逗号),但去掉
loss
周围的括号。如果只操作
loss
,权重将不会更新,如@jdehesa所说。在你的模型中是否有一些随机操作,比如辍学?
c1
c2
有很大的不同吗?@YuwenYan,绝对!!!dropout从网络中选择随机神经元,并根据所选神经元计算损失。如果要交叉验证,可以在
退出()中使用
种子