Keras的“ return_sequences”选项返回2D数组而不是3D

时间:2018-06-24 18:44:03

标签: tensorflow neural-network keras nlp

我正在尝试使用简单的字符级Keras模型从句子中提取关键文本。

我给它x_train填充一个暗淡的(n_examples, 500)填充序列,代表整个句子,而y_train,一个昏暗填充(n_examples, 100)的填充序列,代表要提取的导入文本。

我尝试一个简单的模型,例如:

vocab_size = 1000
src_txt_length = 500
sum_txt_length = 100
inputs = Input(shape=(src_txt_length,))

encoder1 = Embedding(vocab_size, 128)(inputs)
encoder2 = LSTM(128)(encoder1)
encoder3 = RepeatVector(sum_txt_length)(encoder2)

decoder1 = LSTM(128, return_sequences=True)(encoder3)
outputs = TimeDistributed(Dense(100, activation='softmax'))(decoder1)

model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy', optimizer='adam')

当我尝试使用以下代码进行训练时:

hist = model.fit(x_train, y_train, verbose=1, validation_data=(x_test, y_test), batch_size=batch_size, epochs=5)

我得到了错误:

ValueError: Error when checking target: expected time_distributed_27 to have 3 dimensions, but got array with shape (28500, 100)

我的问题是:我在最后一个LSTM层上将return_sequences参数设置为True,但是Dense全连接层告诉我输入是二维的。

我在这里做错了什么?任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

不是在抱怨输入到TimeDistributed,而是不是3D的目标y_train.shape == (n_examples, 100)。您在预测序列和单个点之间存在不匹配。换句话说,outputs是3D,而y_train是2D。