Keras выдает объект Tensor без атрибута _keras_shape при разделении вывода слоя

У меня есть встраивание предложения X в пару предложений размерности 2*1*300. Я хочу разделить этот вывод на два вектора формы 1*300, чтобы вычислить его абсолютную разницу и произведение.

x = MaxPooling2D(pool_size=(1,MAX_SEQUENCE_LENGTH),strides=(1,1))(x)
x_A = Reshape((1,EMBEDDING_DIM))(x[:,0])
x_B = Reshape((1,EMBEDDING_DIM))(x[:,1])

diff = keras.layers.Subtract()([x_A, x_B])
prod = keras.layers.Multiply()([x_A, x_B])


nn = keras.layers.Concatenate()([diff, prod])

В настоящее время, когда я делаю x[:,0], выдается ошибка AttributeError: 'Tensor' object has no attribute '_keras_shape'. Я предполагаю, что результатом разделения тензорного объекта является тензорный объект, у которого нет _keras_shape.

Может ли кто-нибудь помочь мне решить эту проблему? Спасибо.


person Aarthi    schedule 03.12.2017    source источник
comment
Привет, я пытаюсь запустить ваш код, заполнив его самостоятельно, но не могу получить ошибку, которую вы получаете ... можете ли вы опубликовать полный код?   -  person Sarwesh Suman    schedule 03.12.2017
comment
Я получил ошибку при компиляции модели. Ответ ниже исправил это. Благодарить :)   -  person Aarthi    schedule 07.12.2017


Ответы (1)


Keras добавляет некоторую информацию к тензорам, когда они обрабатываются слоями. Поскольку вы разбиваете тензор на внешние слои, он теряет эту информацию.

Решение включает в себя возврат разделенных тензоров из лямбда-слоев:

x_A = Lambda(lambda x: x[:,0], output_shape=notNecessaryWithTensorflow)(x)
x_B = Lambda(lambda x: x[:,1], output_shape=notNecessaryWithTensorflow)(x)
x_A = Reshape((1,EMBEDDING_DIM))(x_A)
x_B = Reshape((1,EMBEDDING_DIM))(x_B)
person Daniel Möller    schedule 03.12.2017