TensorFlow中`py_func`的输出具有未知的秩/形状

34

我正在尝试使用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())

这个代码片段的输出是:

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

为什么 y.shape<unknown>?我希望形状与 inp 相同为 (5,)。谢谢!


1
可能是Tensorflow:Py_func返回未知形状的重复问题。 - gkcn
@gkcn 或许是吧,我问了好一阵子,但我找到了那个作者自己回答的问题。我记得他的解决方案对我不起作用,这就是为什么我写了我的问题。 - Jacques Kvam
1个回答

54

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

y.set_shape(inp.get_shape())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接