【问题标题】:Validation accuracy and Validation Loss starts decreasing rapidly and then starts increasing rapidly with CNN and Batch normalization验证准确度和验证损失开始迅速下降,然后随着 CNN 和批量归一化开始迅速增加
【发布时间】:2021-09-28 09:12:02
【问题描述】:

验证准确率在几个 epoch 内开始迅速增加,然后在代码中添加 Batchnormalization 后开始下降。

我的代码是

model = Sequential()
model.add(layers.Conv2D(32,kernel_size=(3,3),activation='relu',input_shape=(224,224,3)))
model.add(tf.keras.layers.BatchNormalization())
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(layers.MaxPooling2D(pool_size=(2,2)))
model.add(layers.Conv2D(64,(3,3),activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(layers.MaxPooling2D(pool_size=(2,2)))
model.add(layers.Conv2D(128,(3,3),activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(layers.MaxPooling2D(pool_size=(2,2)))
model.add(layers.Flatten())
model.add(layers.Dense(256,activation='relu'))
model.add(tf.keras.layers.BatchNormalization())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(3,activation='softmax'))

如果这种行为是,请指导,我应该检查更多的时期,或者我在这里做错了什么

输出是:

Epoch 13/200
433/433 - 2220s - loss: 0.3787 - categorical_accuracy: 0.8591 - auc: 0.9604 - val_loss: 0.3948 - val_categorical_accuracy: 0.8529 - val_auc: 0.9584
Epoch 14/200
433/433 - 2206s - loss: 0.4009 - categorical_accuracy: 0.8495 - auc: 0.9559 - val_loss: 1.0093 - val_categorical_accuracy: 0.6535 - val_auc: 0.8175
Epoch 15/200
433/433 - 2205s - loss: 0.3705 - categorical_accuracy: 0.8590 - auc: 0.9622 - val_loss: 1.9217 - val_categorical_accuracy: 0.4865 - val_auc: 0.6711
Epoch 16/200
433/433 - 2208s - loss: 0.3483 - categorical_accuracy: 0.8725 - auc: 0.9661 - val_loss: 1.7980 - val_categorical_accuracy: 0.5639 - val_auc: 0.7213
Epoch 17/200
433/433 - 2213s - loss: 0.3396 - categorical_accuracy: 0.8735 - auc: 0.9676 - val_loss: 10.1333 - val_categorical_accuracy: 0.1929 - val_auc: 0.4038
Epoch 18/200
433/433 - 2223s - loss: 0.3364 - categorical_accuracy: 0.8759 - auc: 0.9684 - val_loss: 0.5666 - val_categorical_accuracy: 0.7819 - val_auc: 0.9228
Epoch 19/200
433/433 - 2249s - loss: 0.3292 - categorical_accuracy: 0.8782 - auc: 0.9695 - val_loss: 0.3376 - val_categorical_accuracy: 0.8699 - val_auc: 0.9686
Epoch 20/200
433/433 - 2216s - loss: 0.3155 - categorical_accuracy: 0.8834 - auc: 0.9718 - val_loss: 1.3117 - val_categorical_accuracy: 0.6213 - val_auc: 0.7883

【问题讨论】:

  • 在我看来你的模型刚刚开始过度拟合。

标签: python tensorflow keras deep-learning conv-neural-network


【解决方案1】:

当模型开始过度拟合时会发生这种情况。为了防止这种情况,我们必须在relu激活层之后添加一个dropout层。 另一种防止过拟合的方法是在model.fit()中添加Early Stopping回调

from keras.callbacks import EarlyStopping

es = EarlyStopping(monitor='val_loss', mode='min', verbose=1)
history = model.fit(trainX, trainy, validation_data=(testX, testy), epochs=400, verbose=0, callbacks=[es])

【讨论】:

  • 问题是准确率在几个 epoch 内从 80% 下降到一个非常低的值,比如 19%,然后在一两个 epoch 内增加到一个好的值到 80-90%,然后开始在几个时期内减少然后增加。它在一个时期内从 19% 达到 80%,并且这种行为继续 Epoch 17/200 433/433 - 2213s - loss:0.3396 - categorical_accuracy:0.8735 - auc:0.9676 - val_loss:10.1333 - val_categorical_accuracy:0.1929 Epoch 18/200 433 - 2223s - 损失:0.3364 - categorical_accuracy:0.8759 - auc:0.9684 - val_loss:0.5666 - val_categorical_accuracy:0.7819
猜你喜欢
  • 2017-12-02
  • 2021-05-04
  • 1970-01-01
  • 2019-06-03
  • 2019-11-24
  • 1970-01-01
  • 2015-03-12
  • 2018-11-27
  • 1970-01-01
相关资源
最近更新 更多