首页 > 解决方案 > Keras 模型不学习和预测三类中的一类

问题描述

深度学习领域的新手,目前正在参与这场预测建筑物地震破坏的竞赛。

我创建的模型以 0.56 的精度开始,但在我让它运行的任意数量的 epoch 中都保持在这个精度。完成后,该模型仅预测三个类中的一个(我将其热编码为具有三列的数据帧)。改变层数、优化器、数据准备、dropout不会改变任何东西。即使试图通过神经网络的过度参数化来过度拟合我的模型,仍然具有相同的准确性和非学习模型

我究竟做错了什么?

这是我的代码:

model = keras.models.Sequential()
model.add(keras.layers.Dense(64, input_dim = 85, activation = "relu"))
keras.layers.Dropout(0.3)
model.add(keras.layers.Dense(128, activation = "relu"))
keras.layers.Dropout(0.3)
model.add(keras.layers.Dense(256, activation = "relu"))
keras.layers.Dropout(0.3)
model.add(keras.layers.Dense(512, activation = "relu"))
model.add(keras.layers.Dense(3, activation = "softmax"))

adam = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-08, decay=0.0)

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

history = model.fit(traindata, trainlabels,
                    epochs = 5,
                    validation_split = 0.2,
                    verbose = 1,)



标签: tensorflowkerasdeep-learning

解决方案


您的模型在视觉上没有任何问题,但是学习任何有用的功能可能太繁重了。

  1. 尝试使用https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.StandardScaler.html标准化您的输入

  2. 仅从 2 层和少量神经元开始。

  3. 增加batch_size并尝试 learning_rate 调度。

  4. 观察validation_accuracy,当它开始过拟合时停止。

最后,对于 3 类分类,56% 的准确率优于基线,记住这是一场竞赛,所以数据不是虚拟的游乐场数据,您可以期望在第一次尝试中获得 90% 的准确率。

最后,尝试使用 进行超参数优化tuner


推荐阅读