我正在测试keras的imdb数据集。问题是,当我分开训练并测试2000个单词时,我的准确性接近87%:
(X_train, train_labels), (X_test, test_labels) = imdb.load_data(num_words=2000)
但是当我将单词增加到5000或10000时,该模型的效果就会很差:
(X_train, train_labels), (X_test, test_labels) = imdb.load_data(num_words=10000)
这是我的模特:
model = models.Sequential()
model.add(layers.Dense(256, activation='relu', input_shape=(10000,)))
model.add(layers.Dense(16, activation='relu' ))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(optimizer='adam',
loss='binary_crossentropy',
metrics=['accuracy'])
history =model.fit(X_train, y_train, epochs=10, batch_size=64,validation_data=(x_val, y_val))
任何人都可以解释为什么会这样。尽管我有更多的样本(但拟合不足),但我应该得到一个很好的模型。
谢谢您的建议
答案 0 :(得分:1)
增加num_words
不会增加样本数量,但会增加词汇量,从而(统计上)导致每个样本有更多的单词,朝curse of dimensionality的方向发展,这对模型有害。
来自docs:
num_words:整数或无。需要考虑的最常见的单词。频率较低的单词将在序列数据中显示为oov_char值。