我正在与Keras合作,尝试在LSTM层之前添加一个Embedding层。因此,我的输入数据不再是单一的表示形式,而仅包含实例的索引。这是代码:
n_chars = 97
n_in_seq_length = 9
n_out_seq_length = 1
n_batch = 256
n_epoch = 15
model = Sequential()
model.add(Embedding(n_chars, 200, input_length=n_in_seq_length))
model.add(LSTM(200, return_sequences=True))
model.add(LSTM(200, return_sequences=True))
model.add(TimeDistributed(Dense(n_chars, activation='softmax')))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['categorical_accuracy'])
X, y = np.random.randint(1, 97, (1000,9)), np.random.randint(1, 97, (1000,1))
model.fit(X, y, epochs=n_epoch, batch_size=n_batch)
这是错误消息:
ValueError: Error when checking target: expected lstm_121 to have 3 dimensions, but got array with shape (1000, 1)
我尝试了各种解决方案,例如添加RepeatVector
层,但都无济于事。还要注意的是,我具有相同的代码,但是没有Embedding
层(将单次热表示传递给LSTM),可以很好地工作。