我有巨大的汽车照片。
我想预测汽车的“品牌-型号-车身类型和生产年份”
首先,我将数据拆分为训练和验证,并像这样对它们进行分类。
每个类别都有大约 1000 个训练图像和 900 个验证图像。
我的计划是:我在训练后用这些类别训练我的 keras 模型,模型可以预测如下标签:
奥迪 a3 轿车 2008 => %25
奥迪 a3 轿车 2009 => %25
奥迪 a3 轿车 2010 => %25
奥迪 a3 轿车 2011 => %25
我可以告诉用户:“这辆车是 Audi A3 Sedan 2008-2011”
我的问题是,其中一些类别的照片非常相似。例如:奥迪 a3 2009 和奥迪 a3 2010 的车身类型相同,照片之间没有太大差异(实际没有差异)。正因为如此,训练准确度提高到了 0.9 左右,但验证准确度没有提高到 0.55 以上
当我尝试一些预测时,它通常给出相同的标签,“福特福克斯轿车 2009” :)
这是我的输出:
epoch, acc, loss, val_acc, val_loss
27, 0.7965514530544776, 0.56618134500483, 0.5192149643316993, 1.729015349846447
28, 0.8058803490480816, 0.5408204138258657, 0.5176764522193236, 1.778763979018732
29, 0.8167710489770164, 0.5116128672937693, 0.523258489762041, 1.7806432932022545
30, 0.8256544639818643, 0.4872381848016096, 0.5207534764479939, 1.8059904007678271
31, 0.8355546238309248, 0.4629556378035959, 0.5237253032663666, 1.8191414148756815
32, 0.8424464767701014, 0.4444190686917562, 0.5242512903147193, 1.8496954914466912
33, 0.8508739288802705, 0.422022156655134, 0.5303593149032422, 1.8565427863780883
34, 0.8576819265745635, 0.40545297008116027, 0.5262894901236571, 1.909881308499735
我的火车代码在这里:
Image_width, Image_height = 224, 224
num_epoch = 5000
batch_size = 16
learning_rate = 0.0001
model = ResNet50(weights='imagenet', include_top=False, input_shape=(Image_width, Image_height, 3))
fc_neuron_count = 1024
output = model.output
output = GlobalAveragePooling2D()(output)
output = Dense(fc_neuron_count, activation='relu')(output)
predictions = Dense(num_classes, activation='softmax')(output)
model = Model(inputs=model.input, outputs=predictions)
model.compile(optimizer=opt.Adam(lr=learning_rate), loss=losses.categorical_crossentropy,
metrics=['accuracy'])
history_transfer_learning = model.fit_generator(
train_generator,
epochs=num_epoch,
steps_per_epoch=num_train_samples // batch_size,
validation_data=validation_generator,
validation_steps=num_validate_samples // batch_size,
class_weight='auto',
callbacks=callbacks_list)
难道我做错了什么?我怎样才能达到这个结果?
我应该更改验证准确度计算,还是应该为每个类别提供更多照片?

