首页 > 解决方案 > InceptionResNetV2 验证准确率停留在 20% 到 30% 左右

问题描述

我试图训练一个 CNN 对 9 类图像进行分类。每个类有 1000 张图像用于训练。我尝试在 VGG16 和 VGG19 上进行训练,两者都可以达到 90% 的验证准确率。但是当我尝试在 InceptionResNetV2 模型上进行训练时,该模型似乎停留在 20% 和 30% 左右。下面是我的 InceptionResNetV2 代码和培训。我可以做些什么来改进培训?

base_model = tf.keras.applications.InceptionResNetV2(input_shape=(IMG_HEIGHT, IMG_WIDTH ,3),weights = 'imagenet',include_top=False)
base_model.trainable = False

model = tf.keras.Sequential([
base_model,
Flatten(),
Dense(1024, activation = 'relu', kernel_regularizer=regularizers.l2(0.001)),
LeakyReLU(alpha=0.4),
Dropout(0.5),
BatchNormalization(),
Dense(1024, activation = 'relu', kernel_regularizer=regularizers.l2(0.001)),
LeakyReLU(alpha=0.4),
Dense(9, activation = 'softmax')])

optimizer_model = tf.keras.optimizers.Adam(learning_rate=0.0001, name='Adam', decay=0.00001)
loss_model = tf.keras.losses.CategoricalCrossentropy(from_logits=True)
model.compile(optimizer_model, loss="categorical_crossentropy", metrics=['accuracy'])

Epoch 1/10
899/899 [==============================] - 255s 283ms/step - loss: 4.3396 - acc: 0.3548 - val_loss: 4.2744 - val_acc: 0.3874
Epoch 2/10
899/899 [==============================] - 231s 257ms/step - loss: 3.5856 - acc: 0.4695 - val_loss: 3.9151 - val_acc: 0.3816
Epoch 3/10
899/899 [==============================] - 225s 250ms/step - loss: 3.1451 - acc: 0.4959 - val_loss: 4.8801 - val_acc: 0.2425
Epoch 4/10
899/899 [==============================] - 227s 252ms/step - loss: 2.7771 - acc: 0.5124 - val_loss: 3.7167 - val_acc: 0.3023
Epoch 5/10
899/899 [==============================] - 231s 257ms/step - loss: 2.4993 - acc: 0.5260 - val_loss: 3.7276 - val_acc: 0.3770
Epoch 6/10
899/899 [==============================] - 227s 252ms/step - loss: 2.3148 - acc: 0.5251 - val_loss: 3.7677 - val_acc: 0.3115
Epoch 7/10
899/899 [==============================] - 234s 260ms/step - loss: 2.1381 - acc: 0.5379 - val_loss: 3.4867 - val_acc: 0.2862
Epoch 8/10
899/899 [==============================] - 230s 256ms/step - loss: 2.0091 - acc: 0.5367 - val_loss: 4.1032 - val_acc: 0.3080
Epoch 9/10
899/899 [==============================] - 225s 251ms/step - loss: 1.9155 - acc: 0.5399 - val_loss: 4.1270 - val_acc: 0.2954
Epoch 10/10
899/899 [==============================] - 232s 258ms/step - loss: 1.8349 - acc: 0.5508 - val_loss: 4.3918 - val_acc: 0.2276

标签: pythontensorflowdeep-learning

解决方案


VGG-16/19 的深度为 23/26 层,而 InceptionResNetV2 的深度为 572 层。现在,医学图像和 imagenet 数据集之间的域相似性最小。在 VGG 中,由于深度较低,您获得的特征并不复杂,网络能够根据密集层特征对其进行分类。然而,在 IRV2 网络中,由于它太深,fc层的输出更复杂(将其可视化为对象,但对于 imagenet 数据集),然后从这些层获得的特征无法连接到 Dense 层特征,因此过度拟合。我想你能明白我的意思。

在此链接上查看我对您非常相似的问题的回答:链接。这将有助于提高您的准确性。


推荐阅读