【问题标题】:Tensorflow multiple inputs to graphTensorflow 多个输入到图形
【发布时间】:2017-01-24 18:09:26
【问题描述】:

这可能是微不足道的。我有一个模型需要一些出列张量X;

X = tf.Tensor(...)
yPred = model(X,...)

现在我有时想喂另一个张量Z

Z = tf.placeholder(...)
yPredZ = model(Z,...)

如何在不重新定义子图的情况下做到这一点?

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    TensorFlow 中的馈送机制允许您为 任何 张量(不仅仅是 tf.placeholder() 张量)馈送值,只要它们的形状和元素类型匹配即可。

    因此,如果xz的形状相同,你应该可以写成:

    x = ...  # Some dequeued `tf.Tensor`. 
    yPred = model(x, ...)
    
    # ...
    
    sess.run(yPred, feed_dict={x: ...})
    

    在某些情况下,您可能希望将具有不同形状的张量提供给 x(通常是不太具体的形状,例如具有不同的批量大小维度)。在这些情况下,您可以使用tf.placeholder_with_default() 创建一个占位符,当您馈送它时,其值默认为x

    x = ...  # Some dequeued `tf.Tensor`.
    
    # For example, a shape of `None` means that the shape is completely unconstrained.
    # In practice, you will probably want to constrain at least the rank of the
    # placeholder to match the rank of `x`.
    x_placeholder = tf.placeholder_with_default(x, shape=None)
    
    yPred = model(x, ...)
    
    # ...
    
    sess.run(yPred, feed_dict={x_placeholder: ...})
    

    【讨论】:

    • 再次感谢。如果Z 实际上是另一个出列张量怎么办? IE。不是 numpy 数组或其他东西。我能以某种方式喂它吗?
    • 目前我正在评估 Z.eval() 以在将其重新输入之前转换为 np 数组。看起来有点乱。
    • 嗯,不容易。我假设您不想在所有情况下都将某些东西出队到Z,所以您可能想要使用tf.cond(),将出队操作放在其中一个分支中,并使用tf.bool 占位符来控制tf.cond() 的哪个分支被占用。
    猜你喜欢
    • 2017-11-23
    • 2016-07-30
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多