Tensorflow:用 tf.Variable 替换/提供图形的占位符?
Posted
技术标签:
【中文标题】Tensorflow:用 tf.Variable 替换/提供图形的占位符?【英文标题】:Tensorflow: Replacing/feeding a placeholder of a graph with tf.Variable? 【发布时间】:2018-10-14 23:59:24 【问题描述】:我有一个模型M1
,其数据输入是占位符M1.input
,并且其权重经过训练。
我的目标是建立一个新模型M2
,它从w
的输入w
以tf.Variable
的形式计算M1
的输出o
(具有训练的权重)(而不是将实际值提供给@987654328 @)。换句话说,我使用训练好的模型M1
作为黑盒函数来构建一个新模型o = M1(w)
(在我的新模型中,w
是要学习的,M1
的权重固定为常数)。问题是M1
只接受M1.input
作为它的输入,我们需要通过它输入实际值,而不是像w
这样的tf.Variable。
作为构建M2
的简单解决方案,我可以在M2
内手动构建M1
,然后使用预训练值初始化M1
的权重,并使其在M2
内不可训练。然而,在实践中,M1
很复杂,我不想在M2
中再次手动构建M1
。我正在寻找一个更优雅的解决方案,例如解决方法或直接解决方案,用 tf.Variable w
替换 M1
的输入占位符 M1.input
。
感谢您的宝贵时间。
【问题讨论】:
【参考方案1】:这是可能的。怎么样:
import tensorflow as tf
def M1(input, reuse=False):
with tf.variable_scope('model_1', reuse=reuse):
param = tf.get_variable('param', [1])
o = input + param
return o
w = tf.get_variable('some_w', [1])
plhdr = tf.placeholder_with_default(w, [1])
output_m1 = M1(plhdr)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(w.assign([42]))
print(sess.run(output_m1, plhdr: [0])) # direct from placeholder
print(sess.run(output_m1)) # direct from variable
所以当 feed_dict 有占位符的值时,就会使用这个值。否则,使用变量“w”的后备选项处于活动状态。
【讨论】:
以上是关于Tensorflow:用 tf.Variable 替换/提供图形的占位符?的主要内容,如果未能解决你的问题,请参考以下文章
tensorflow中使用tf.variable_scope和tf.get_variable的ValueError
TensorFlow 辨异 —— tf.placeholder 与 tf.Variable