我尝试使用 IMDB 数据训练模型。我得到的预期训练精度约为 96%+,但我对测试精度不满意。现在我的期望是在测试数据上获得 90%+ 的测试精度。我尝试使用多个分类器,但每次测试数据的准确率都达到 84% 到 89%。在这里我将包括一些我已经尝试过的分类器。在大多数情况下,我尝试通过增加纪元或更改优化器来进行一些参数调整。现在我关心的是如何才能将测试准确率提高到 90%+ 。
到目前为止我尝试过的分类器:
第一:
model = Sequential()
model.add(Embedding(vocab_size, 32, input_length = max_words))
model.add(Bidirectional(LSTM(32, return_sequences = True)))
model.add(GlobalMaxPool1D())
model.add(Dense(20, activation="relu"))
model.add(Dropout(0.05))
model.add(Dense(1, activation="sigmoid"))
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train,y_train,validation_data=(x_test, y_test),epochs=10,batch_size=100)
第二:
model = Sequential([
Embedding(vocab_size, 32, input_length=max_words),
Dropout(0.2),
ZeroPadding1D(padding=1),
Convolution1D(64, 5, activation='relu'),
Dropout(0.2),
MaxPooling1D(),
Flatten(),
Dense(100, activation='relu'),
Dropout(0.2),
Dense(1, activation='sigmoid')
])
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
model.fit(x_train,y_train,validation_data=(x_test, y_test),epochs=10,batch_size=100)
通过检查 IMDB 数据集的最先进分析,我认为使用像您正在使用的简单模型无法达到 ^90%。但是,您可以尝试使用像 glove 这样的预训练嵌入,而不是训练自己的嵌入。另外,我发现这个 repo 在 keras 中有 BERT 实现,提供了 IMBD 分类的演示,它能够获得约 99% 的准确率。
此代码不起作用,任何人都可以解决这个问题。 提供的 github 链接包含一个不起作用的 jupyter 笔记本