如何纠正/改进我的 CNN 模型?如何处理验证准确性冻结问题?

Posted

技术标签:

【中文标题】如何纠正/改进我的 CNN 模型?如何处理验证准确性冻结问题?【英文标题】:How to redress/improve my CNN model? How to handle validation accuracy frozen problem? 【发布时间】:2021-07-01 01:57:14 【问题描述】:

验证集准确率冻结在 0.0909。这是欠拟合吗?如何解决该问题以获得更好的模型精度。该模型稍后会转换为 tflite 以部署在 android 上。

我的模特:

model = Sequential([
Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same', input_shape=(224, 224, 3)),
MaxPool2D(pool_size=(2, 2), strides=2),
Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPool2D(pool_size=(2, 2), strides=2),
Conv2D(filters=128, kernel_size=(3, 3), activation='relu', padding='same'),
MaxPool2D(pool_size=(2, 2), strides=2),
Flatten(),
Dense(units=train_batches.num_classes, activation='softmax')

])

model.summary()

层(类型)输出形状参数#

conv2d (Conv2D) (无, 224, 224, 32) 896


max_pooling2d (MaxPooling2D) (无, 112, 112, 32) 0


conv2d_1 (Conv2D)(无、112、112、64)18496


max_pooling2d_1 (MaxPooling2 (None, 56, 56, 64) 0


conv2d_2 (Conv2D) (无, 56, 56, 128) 73856


max_pooling2d_2 (MaxPooling2 (None, 28, 28, 128) 0


展平(Flatten)(无,100352)0


密集(密集)(无,11)1103883

总参数:1,197,131 可训练参数:1,197,131 不可训练参数:0


model.compile(optimizer=Adam(learning_rate=0.01), loss=categorical_crossentropy, metrics=['accuracy'])

model.fit(x=train_batches, validation_data=valid_batches, epochs=10, verbose=2)

Epoch 1/10
53/53 - 31s - loss: 273.5211 - accuracy: 0.0777 - val_loss: 2.3989 - val_accuracy: 0.0909
Epoch 2/10
53/53 - 27s - loss: 2.4001 - accuracy: 0.0928 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 3/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0795 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 4/10
53/53 - 29s - loss: 2.4006 - accuracy: 0.0739 - val_loss: 2.3989 - val_accuracy: 0.0909
Epoch 5/10
53/53 - 29s - loss: 2.3999 - accuracy: 0.0720 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 6/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0720 - val_loss: 2.3986 - val_accuracy: 0.0909
Epoch 7/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0682 - val_loss: 2.3993 - val_accuracy: 0.0909
Epoch 8/10
53/53 - 29s - loss: 2.3995 - accuracy: 0.0871 - val_loss: 2.3986 - val_accuracy: 0.0909  
Epoch 9/10
53/53 - 29s - loss: 2.4008 - accuracy: 0.0852 - val_loss: 2.3988 - val_accuracy: 0.0909
Epoch 10/10
53/53 - 28s - loss: 2.4004 - accuracy: 0.0833 - val_loss: 2.3991 - val_accuracy: 0.0909

【问题讨论】:

【参考方案1】:

尝试使用较低的学习率。还要检查您的数据集。我的意思是您正在使用的数据集,如果它是一个小的数据集,则使用图像增强来增加它,以便模型可以更好地学习它。使用批量归一化以及正则化技术和 LR 调度程序,因为您的梯度下降正落入局部最小值。

【讨论】:

感谢您的帮助

以上是关于如何纠正/改进我的 CNN 模型?如何处理验证准确性冻结问题?的主要内容,如果未能解决你的问题,请参考以下文章

验证集CNN

如何提高 CNN 模型的验证准确度

如何改进 CNN 模型?

asp.net mvc 中模型验证如何处理数组呢?

如果模型表单排除了某些字段,当模型有一个干净的方法时,如何处理模型表单的验证?

iOS,如何处理 iCloudKit 事务的发布通知请求?