首页 > 解决方案 > 如何纠正/改进我的 CNN 模型?如何处理验证准确性冻结问题?

问题描述

验证集准确度冻结在 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 (无, 56, 56, 64) 0


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


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


展平(展平)(无,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

标签: pythonconv-neural-networktensorflow2.0tensorflow-lite

解决方案


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


推荐阅读