我正在尝试使用简单的字符级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全连接层告诉我输入是二维的。
我在这里做错了什么?任何帮助将不胜感激!
答案 0 :(得分:1)
不是在抱怨输入到TimeDistributed
,而是不是3D的目标y_train.shape == (n_examples, 100)
。您在预测序列和单个点之间存在不匹配。换句话说,outputs
是3D,而y_train
是2D。