2

我有一个句子对的句子嵌入输出 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.

有人可以帮我解决这个问题吗?谢谢。

4

1 回答 1

1

Keras 在分层处理时向张量添加一些信息。由于您要拆分张量外层,因此它会丢失该信息。

该解决方案涉及从 Lambda 层返回拆分张量:

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)
于 2017-12-03T17:12:07.093 回答