【发布时间】:2019-09-30 09:07:07
【问题描述】:
我是 Keras 和 TensorFlow 的新手。我正在尝试训练用于图像分类的卷积神经网络。我有大量车辆图像,需要获取方向分类。 Here 是一种使用梯度直方图 (HOG) 的方法(我还需要车顶类,一共九个类)。
以下是我的 CNN 的 Python 代码。
model = Sequential([
Conv2D(32, (5, 5), input_shape=(1536, 2048, 3)),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
# One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
Dense(9, activation='softmax')
])
model.compile(
optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy']
)
model.fit(
train_images, # Training data
to_categorical(train_labels), # Training targets
epochs=4,
batch_size=16
)
如您所见,我的 CNN 仅由三层组成。我的训练数据集由 100 辆不同车辆的样本组成,每辆车都有所有 9 个所需的方向,总共有 900 张图像。在四个 epoch 中,我设法在训练阶段达到了 90% 的准确率,但在测试阶段只有约 50% 的准确率。该模型在预测其从未见过的图像的结果时表现不佳。
我的 CNN 模型非常基础。我不得不将 epoch 的数量从 5 减少到 4,因为它在第五个 epoch 开始过拟合。我的问题是:如何改进我的模型?我的数据集足够大吗?我必须向模型添加更多层吗?
提前致谢。
更新
这是经过审查的模型:
model = Sequential([
Conv2D(32, (3, 3), input_shape=(224, 224, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3)),
Conv2D(256, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(256, (3, 3)),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
# One output network layer with 9 nodes (corresponding to the 9 final classes/orientations)
Dense(9, activation='softmax')
])
【问题讨论】:
-
Thia 模型仍然太小,如果没有 GPU,请在 Colab 中训练更好的模型
标签: python tensorflow machine-learning keras