我试图实现一个序列到序列的语言模型。在训练过程中,模型将 GloVe 生成的 50d 个词向量序列,输出 1-to-V(V 是词汇量的大小)向量表示下一个词,因此可以看作下一个词对应的分布到测试过程中当前时间步的输入词向量,我尝试了一个 112 词的词汇表。
然后,我构建了两个模型,如下所示:
model1 = Sequential()
model1.add(LSTM(112, return_sequences=True, input_shape=(31, 50)))
model2 = Sequential()
model2.add(LSTM(112, return_sequences=True, input_shape=(31, 50)))
model2.add(TimeDistributed(Dense(112, activation="linear")))
当我试图通过
model.fit(X, Y, batch_size=128, nb_epoch=256, validation_rate=0.1)
第一个模型model1
崩溃并引发 MemoryError,但第二个模型model2
正常完成。X 的形状为(number_of_sentences, max_words_in_one_sentence, 50)
,Y 的形状为(number_of_sentences, max_words_in_one_sentence, 112)
。在这个例子中,number_of_sentences=10000, max_words_in_one_sentence=13
。
我想知道当我将一个新的时间分布密集附加到 LSTM 层时发生了什么,以及哪个是我想要实现我的语言模型的模型。