【发布时间】:2021-05-12 09:26:52
【问题描述】:
我是 CNN 开发的初学者,为了完成一项大学任务,我的任务是为食品创建一个图像分类器。我使用的数据集是Recipes5k。它有101类食物:
我正在使用与 Tensorflow 配对的 Google Colab 来实现这一点,并且一直在关注 Tensorflow's image classification beginner tutorial。
到目前为止,一切都清晰易懂,但在训练我的模型时遇到了一个问题:与训练准确度(90 %+)。我怀疑这可能是由于模型的过度拟合。到目前为止,我已经尝试了图像增强技术并将 dropout 应用于模型。这没有按预期工作,仅将准确率提高了约 5%。我已经在下面发布了必要的代码 sn-ps:
数据增强层:
data_augmentation = keras.Sequential(
[
layers.experimental.preprocessing.RandomFlip("horizontal",
input_shape=(img_height,
img_width,
3)),
layers.experimental.preprocessing.RandomRotation(0.1),
layers.experimental.preprocessing.RandomZoom(0.1),
]
)
型号:
model = Sequential([
data_augmentation,
layers.experimental.preprocessing.Rescaling(1./255),
layers.Conv2D(16, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(32, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Conv2D(64, 3, padding='same', activation='relu'),
layers.MaxPooling2D(),
layers.Dropout(0.3),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(num_classes)
])
模型总结:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
sequential_1 (Sequential) (None, 224, 224, 3) 0
_________________________________________________________________
rescaling_2 (Rescaling) (None, 224, 224, 3) 0
_________________________________________________________________
conv2d_3 (Conv2D) (None, 224, 224, 16) 448
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 112, 112, 16) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 112, 112, 32) 4640
_________________________________________________________________
max_pooling2d_4 (MaxPooling2 (None, 56, 56, 32) 0
_________________________________________________________________
conv2d_5 (Conv2D) (None, 56, 56, 64) 18496
_________________________________________________________________
max_pooling2d_5 (MaxPooling2 (None, 28, 28, 64) 0
_________________________________________________________________
dropout (Dropout) (None, 28, 28, 64) 0
_________________________________________________________________
flatten_1 (Flatten) (None, 50176) 0
_________________________________________________________________
dense_2 (Dense) (None, 128) 6422656
_________________________________________________________________
dense_3 (Dense) (None, 101) 13029
=================================================================
Total params: 6,459,269
Trainable params: 6,459,269
Non-trainable params: 0
_________________________________________________________________
训练 250 轮后的结果
Epoch 250/250
121/121 [==============================] - 3s 25ms/step - loss: 0.2564 - accuracy: 0.9270 - val_loss: 17.6184 - val_accuracy: 0.1202
我还可以使用哪些其他技术来提高模型的准确性?
更新:我按照 Gerry P 的建议编辑了最后一个密集层以使用 softmax 激活。 1250 个 epoch 的训练结果显示训练准确度增加较慢,验证准确度增加约 5-6%。这改进了我的模型,但准确度仍然很低。
【问题讨论】:
标签: python tensorflow machine-learning keras deep-learning