改善神经网络模型中的损失减少

时间:2019-06-16 10:09:31

标签: machine-learning keras neural-network

以下代码用于训练给定数据集(50,000个样本,64个暗点)的神经网络模型。

from keras import Sequential
from keras.layers import Dense
from keras.optimizers import Adam


X, y = process_dataset()
model = Sequential([
    Dense(16, input_dim=X.shape[1], activation='relu'),
    Dense(16, activation='relu'),
    Dense(1, activation='sigmoid')
])

'''
    Compile the Model
'''
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.01), metrics=['accuracy'])

'''
    Fit the Model
'''
model.fit(X, y, shuffle=True, epochs=1000, batch_size=200, validation_split=0.2, verbose=2)

在一开始,您可以在下面看到val_loss从一个时期减少到另一个时期。

Epoch 82/1000
 - 0s - loss: 0.2036 - acc: 0.9144 - val_loss: 0.2400 - val_acc: 0.8885
Epoch 83/1000
 - 0s - loss: 0.2036 - acc: 0.9146 - val_loss: 0.2375 - val_acc: 0.8901

当模型经历多个时期时,损耗变化会变得很小,尤其是当时期数增加时。

Epoch 455/1000
 - 0s - loss: 0.0903 - acc: 0.9630 - val_loss: 0.1317 - val_acc: 0.9417
Epoch 456/1000
 - 0s - loss: 0.0913 - acc: 0.9628 - val_loss: 0.1329 - val_acc: 0.9443

请问两个问题:

  1. 这种现象是什么意思?也就是说,损失从一开始就开始很好地减少,但是到训练时期进行大量迭代时,损失就没有太大减少。
  2. 对此可能的解决方案是什么?

谢谢

1 个答案:

答案 0 :(得分:0)

这是由于权重的梯度收敛于局部(或全局)最小值。发生这种情况的某些原因是:

  • a)学习率太小
  • b)该模型无法对数据进行成功分类,这意味着数据可能已经损坏,需要进一步预处理

这里有更深入的解释:multiprocessing.dummy

一些解决方案是尝试对您的超参数进行网格搜索,例如学习率,每一层中的神经元数量,层数等。