[英]Sudden 50% accuracy drop while training convolutional NN
使用Keras和Tensorflow在我自己的数据集上从头开始训练卷积神经网络。
learning rate = 0.0001
个要排序的类,没有使用Dropout,数据集检查两次,没有找到错误的标签
模型:
model = models.Sequential()
model.add(layers.Conv2D(16,(2,2),activation='relu',input_shape=(75,75,3)))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(16,(2,2),activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Conv2D(32,(2,2),activation='relu'))
model.add(layers.MaxPooling2D((2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(128,activation='relu'))
model.add(layers.Dense(5,activation='sigmoid'))
model.compile(optimizer=optimizers.adam(lr=0.0001),
loss='categorical_crossentropy',
metrics=['acc'])
history = model.fit_generator(train_generator,
steps_per_epoch=100,
epochs=50,
validation_data=val_generator,
validation_steps=25)
每当模型达到25-35个时期(准确度为80-90%)时,就会发生这种情况:
Epoch 31/50
100/100 [==============================] - 3s 34ms/step - loss: 0.3524 - acc: 0.8558 - val_loss: 0.4151 - val_acc: 0.7992
Epoch 32/50
100/100 [==============================] - 3s 34ms/step - loss: 0.3393 - acc: 0.8700 - val_loss: 0.4384 - val_acc: 0.7951
Epoch 33/50
100/100 [==============================] - 3s 34ms/step - loss: 0.3321 - acc: 0.8702 - val_loss: 0.4993 - val_acc: 0.7620
Epoch 34/50
100/100 [==============================] - 3s 33ms/step - loss: 1.5444 - acc: 0.3302 - val_loss: 1.6062 - val_acc: 0.1704
Epoch 35/50
100/100 [==============================] - 3s 34ms/step - loss: 1.6094 - acc: 0.2935 - val_loss: 1.6062 - val_acc: 0.1724
答案有一些类似的问题,但大多数建议降低学习率,但它根本没有帮助。
UPD:网络中几乎所有的权重和偏见都变成了nan
。 网络不知何故死在里面
这种情况下的解决方案
我将最后一层中的sigmoid
函数更改为softmax
函数,并且丢弃了
为什么会这样呢?
sigmoid
激活函数用于二进制(两类)分类。 在多分类问题中,我们应该使用softmax
函数 - sigmoid
函数的特殊扩展,用于多分类问题。
更多信息: Sigmoid vs Softmax
特别感谢@desertnaut和@Shubham Panchal的错误指示
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.