我有一个带有一些权重的NN模型,我需要能够使用一组权重A和有时一组权重B进行推理(和学习)。 我知道我可以将值提供给变量而不仅仅是占位符,但如果我这样做,我会永久覆盖变量值,还是临时的,在请求的op节点的执行窗口内?
例如, 让我们假设我构建了图表并使用权重集A学习了一个模型。 如果我想使用另一个权重集进行推理,设置B,我可以这样做:
sess.run(output, feed_dict={input:input, weights:weightsB}) #inference
我的qeustion是,如果我输入值weightB,那么它们会永久覆盖网络的值吗?如果下次我会跑
sess.run(output, feed_dict={input:input}) #inference
它会使用weightsA还是weightB?
答案 0 :(得分:4)
在TensorFlow中,一步为变量提供值不会影响存储在该变量中的值。在后续步骤中,如果您使用该变量,它将继续具有其先前的值。
请注意,如果您希望Feed在以后的步骤中更改变量的值,则应使用以下结构明确将该值赋值给变量:
v = tf.Variable(...)
v_update_placeholder = tf.placeholder(v.dtype, shape=v.shape)
v_update_op = v.assign(v_update_placeholder).op
# ...
sess.run(v_update_op, feed_dict={v_update_placeholder: ...})