如何确定Keras LSTM输入/输出尺寸?

2024-04-25 02:21:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我的模型是:

model = Sequential()
model.add(Embedding(input_dim=vocab_size,
                    output_dim=1024, input_length=self.SEQ_LENGTH))

model.add(LSTM(vocab_size))

model.add(Dropout(rate=0.5))
model.add(Dense(vocab_size, activation='softmax'))
print(model.summary())

model.compile(loss='sparse_categorical_crossentropy',
              optimizer="adam", metrics=['accuracy'], callbacks=callbacks)

总结如下:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding_1 (Embedding)      (None, 100, 1024)         5064704   
_________________________________________________________________
lstm_1 (LSTM)                (None, 4946)              118130264 
_________________________________________________________________
dropout_1 (Dropout)          (None, 4946)              0         
_________________________________________________________________
dense_1 (Dense)              (None, 4946)              24467862  
=================================================================
Total params: 147,662,830
Trainable params: 147,662,830
Non-trainable params: 0
_________________________________________________________________

但当我运行它时,我得到一个错误:

ValueError: Error when checking target: expected dense_1 to have shape (1,) but got array with shape (4945,)

我需要改变什么才能使它更好地匹配


Tags: noneaddinputsizemodelembeddingparamsdropout
1条回答
网友
1楼 · 发布于 2024-04-25 02:21:47

我认为你的模型不是你想要的:

model.add(LSTM(vocab_size))

你不需要一个包含4946个神经元的LSTM层

model.add(Dense(vocab_size, activation='softmax'))

我猜你不想预测4946个班级

but got array with shape (4945,)

您的模型需要一个数据集,其中每一行都是单词索引列表,最大索引是vocab_size

我需要改变什么才能使它更好地匹配? 我认为你应该看看keras NLP的例子。这解释得很好

相关问题 更多 >