使用Python过度拟合的神经网络

时间:2019-02-13 06:09:34

标签: python tensorflow keras

我正在尝试对一个网络进行建模,该网络需要90个参数,并给出一个介于1和6之间(含1和6)的整数。 以下是i打算开始使用的按比例缩放的模型,我很感谢所有的更正或指导

self.model = keras.Sequential()
self.model.add(BatchNormalization(input_shape=(None, 90)))
self.model.add(Activation(activation="relu"))
self.model.add(LSTM(50))
self.model.add(Activation(activation="relu"))
self.model.add(Dropout(0.01))
self.model.add(Dense(7,  activation="softmax"))

self.train_epoch = 6000
opt = keras.optimizers.Adam(lr=0.000002)
self.model.compile(optimizer=opt, loss=keras.losses.sparse_categorical_crossentropy,  metrics=['accuracy'])
info = self.model.fit(self.x, self.y, epochs=self.train_epoch, validation_data=(self.m, self.n),  shuffle=True )

问题来了,我的验证损失在一段时间后一直在增加。 我尝试了低学习率,高辍学价值,甚至增加了层次数。 有人可以告诉我我做错了什么吗。

我也不确定要使用多少层或每层节点来实现精度值大于0.5。

如果有人可以帮助,我将提供数据链接,以查看他们是否可以取得更好的结果。

这里是我当前的图表。enter image description here

2 个答案:

答案 0 :(得分:0)

当然,如果长时间训练,验证错误最终会增加。 如标题中所述,这是过度拟合的常见结果。这就是为什么您要检查验证错误(以检测过度拟合并终止训练)以及训练错误的原因。 您可以自己监视验证丢失,也可以使用early stopping

在Keras中应用早期停止的方法介绍于: https://machinelearningmastery.com/how-to-stop-training-deep-neural-networks-at-the-right-time-using-early-stopping/

请注意,LSTM用于时间序列数据(keras.**Sequential**())。

答案 1 :(得分:0)

您的陈述与图表矛盾。遇到过度拟合时,请始终减少模型的参数数量(即层/内核)。尝试训练更少的时期。您似乎正在增加他们。此外,您的机会等级是1/7,而不是1/2。我相信这是7类问题。