【问题标题】:Output from TensorFlow `py_func` has unknown rank/shapeTensorFlow `py_func` 的输出具有未知等级/形状
【发布时间】:2017-03-04 00:02:10
【问题描述】:

我正在尝试在 TensorFlow 中创建一个简单的神经网络。唯一棘手的部分是我有一个使用py_func 实现的自定义操作。当我将py_func 的输出传递到Dense 层时,TensorFlow 抱怨应该知道排名。具体错误是:

ValueError: Inputs to `Dense` should have known rank.

当我通过py_func 传递数据时,我不知道如何保留数据的形状。我的问题是如何获得正确的形状?下面我有一个简单的例子来说明这个问题。

def my_func(x):
    return np.sinh(x).astype('float32')

inp = tf.convert_to_tensor(np.arange(5))
y = tf.py_func(my_func, [inp], tf.float32, False)

with tf.Session() as sess:
    with sess.as_default():
        print(inp.shape)
        print(inp.eval())
        print(y.shape)
        print(y.eval())

这个 sn-p 的输出是:

(5,)
[0 1 2 3 4]
<unknown>
[  0.       
1.17520118   3.62686038  10.01787472  27.28991699]

为什么是y.shape &lt;unknown&gt;?我希望形状为(5,)inp 相同。谢谢!

【问题讨论】:

  • @gkcn 也许,我已经有一段时间没有问了,但我发现了作者自己回答的那个问题。我记得他的解决方案对我不起作用,这就是我写问题的原因。

标签: tensorflow


【解决方案1】:

由于py_func 可以执行任意 Python 代码并输出任何内容,因此 TensorFlow 无法确定形状(需要分析函数体的 Python 代码)您可以手动给出形状

y.set_shape(inp.get_shape())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多