Tensorflow - ValueError: Выходные тензоры в модель должны быть выходными данными TensorFlow `Layer` - PullRequest
4 голосов
/ 29 апреля 2019

Я создал RNN с функциональным API Keras в TensorFlow 2.0, где работает следующий фрагмент кода

sum_input = keras.Input(shape=(UNIT_SIZE, 256,), name='sum')
x         = tf.unstack(sum_input,axis=2, num=256)
t_sum     = x[0]
for i in range(len(x) - 1):
    t_sum = keras.layers.Add()([t_sum, x[i+1]])
sum_m     = keras.Model(inputs=sum_input, outputs=t_sum, name='sum_model')

Затем мне пришлось перейти на Tensorflow 1.13, который выдает мне следующую ошибку

ValueError: Output tensors to a Model must be the output of a TensorFlow `Layer` (thus holding past layer metadata). Found: Tensor("add_254/add:0", shape=(?, 40), dtype=float32)

Я не понимаю, почему выходной тензор не из слоя Tensorflow, поскольку t_sum - это выход из keras.layers.Add.

Я попытался заключить части кода в keras.layers.Lambda, как предложено в ValueError: Выходные тензоры в модель должны быть выходными данными слоя TensorFlow. , но, похоже, это не работает для меня.

1 Ответ

3 голосов
/ 29 апреля 2019

Проблема не в слое Add(), а в tf.unstack() - это не экземпляр keras.layers.Layer().Вы можете просто обернуть его как пользовательский слой:

import tensorflow as tf

class Unstack(tf.keras.layers.Layer):
    def __init__(self):
        super(Unstack, self).__init__()
    def call(self, inputs, num=256):
        return tf.unstack(inputs, axis=2, num=num)

x = Unstack()(sum_input)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...