Выход из TensorFlow "py_func" имеет неизвестный ранг/форму

Я пытаюсь создать простую нейронную сеть в TensorFlow. Единственная сложность в том, что у меня есть пользовательская операция, которую я реализовал с помощью py_func. Когда я py_func вывод из py_func в Dense слой, TensorFlow жалуется, что ранг должен быть известен. Конкретная ошибка:

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

Я не знаю, как сохранить форму моих данных, когда я py_func их через 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>? Я хочу, чтобы форма (5,) такой же, как inp. Спасибо!

Ответ 1

Поскольку py_func может выполнять произвольный код Python и выводить что-либо, TensorFlow не может определить форму (для этого потребуется анализ кода функции Python). Вместо этого вы можете дать форму вручную

y.set_shape(inp.get_shape())