【问题标题】:Tensorflow: Replacing/feeding a placeholder of a graph with tf.Variable?Tensorflow:用 tf.Variable 替换/提供图形的占位符?
【发布时间】:2018-10-14 23:59:24
【问题描述】:

我有一个模型M1,其数据输入是占位符M1.input,并且其权重经过训练。 我的目标是建立一个新模型M2,它从w 的输入wtf.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

感谢您的宝贵时间。

【问题讨论】:

    标签: tensorflow placeholder


    【解决方案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”的后备选项处于活动状态。

    【讨论】:

      猜你喜欢
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-25
      • 1970-01-01
      相关资源
      最近更新 更多