我在测试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))
能有人解释这是为什么吗?我原本以为更多的样本(和更少的过拟合)应该会得到一个非常好的模型。
感谢任何建议
回答:
增加num_words
并不会增加样本数量,而是增加了词汇量,导致每个样本的词数增加(从统计学上讲),这会朝向维度灾难的方向发展,对模型有害。
根据文档:
num_words:整数或None。考虑最常见的词汇数量。任何频率较低的词将在序列数据中显示为oov_char值。