当用一个简单的RNN层来拟合模型时,我每次都会达到精确37.62%的val_精度上限。为什么会这样?

2024-04-25 20:23:39 发布

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

使用keras SimpleRN层,我击中了这面墙。我还有另外两个模型,一个模型只有完全连接的密集层,另一个模型使用LSTM,正如预期的那样工作,所以我不认为数据处理是问题所在

在上下文中,我使用tf.keras reuters数据集,它被标记化,输出数据由46个可能的标记组成,我已经对这些标记进行了分类

数据是什么样子以及如何处理 What the data looks like and how it's processed

下面是模型代码

modelRNN = Sequential()

modelRNN.add(Embedding(input_dim=maxFeatures, output_dim=256,input_shape=(maxWords,)))
modelRNN.add(SimpleRNN(1024))
#modelRNN.add(Activation("sigmoid"))
modelRNN.add(Dropout(0.8))

modelRNN.add(Dense(128))

modelRNN.add(Dense(46, activation="softmax"))


modelRNN.compile(
  optimizer='adam',
  loss='categorical_crossentropy',
  metrics=['accuracy'],
)

我使用以下参数进行拟合

historyRNN = modelRNN.fit(x_train, y_train,
  epochs=100,
  batch_size=512,
  shuffle=True,
  validation_data = (x_test,y_test)
  )

拟合该模型,始终具有03762的val_精度和~3,4的val_损失。从图表中可以清楚地看到这个“上限”:

Graphs

我尝试过的事情:更改超级参数,更改输入数据形状,尝试不同的优化器

谢谢你的任何提示。感谢那些帮助编辑我的帖子让我更容易理解的人:)

使用相同数据的其他两个模型的图表:

仅密集层

Dense graph

LSTM

LSTM graph