在Tensorflow中训练完神经网络后,如何阻止其更新权重和偏置以测试它们当前的值?据我所知,可以使用inspect_checkpoint.print_tensors_in_checkpoint_file
来检查它们,但输出结果无法用于计算。我已经尝试过以下方法:
tf.train.Saver.restore
– 这只会在变量被保存后重新激活反向传播(这与我想要达到的效果完全相反!)tf.variable_scope.reuse_variables
– 同样不起作用tf.stop_gradient
– 令人惊讶的是,它让一组值在in range (0,10)
的循环中出现了两次,而变量被打印出来。然而,在所有其他迭代中,变量会采用其他值。
回答:
更新操作(例如调用optimize
)只有在你运行相应操作时才会执行。如果你想访问变量的值而不更新它,不要运行更新操作(例如train_op
或tf.assign
),只需评估变量即可:
import tensorflow as tfweight = tf.Variable(0.0)op = tf.assign_add(weight, 1) # 通过将1加到weight上更新weightwith tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(sess.run(weight)) # 获取weight的值 print(sess.run(op)) # 更新weight print(sess.run(weight)) # 获取weight的值但不更新它 print(sess.run(weight)) # 获取weight的值
将会打印:
0.01.01.01.0