【发布时间】:2020-12-16 11:22:40
【问题描述】:
我尝试使用迁移学习来训练识别猫和狗的模型。真实数据集有大约 25,000 张训练图像和 12,500 张测试图像。
我创建了目录train 和test(用于我的验证集),每个目录中都有cats 和dogs 子目录。真实train数据集中dogs的文件名格式为dog.1, dog.2,dog.3...,而cat的文件名格式为cat.1, cat.2, cat.3。 ..我成功地将文件拆分到正确的子目录中
在真正的测试文件夹中,文件名只有1、2、3、4...12,500,包括dogs和cats这两个图像
我已经以大约 98% 的验证准确率训练了我的模型,但是当我加载测试文件进行预测时,我得到了输出 Found 12500 images belonging to 1 classes。我需要两个类,0 或 1。
当我检查我创建的目录长度时,情况并非如此。不知道哪里弄错了
所有包导入
conv_base = VGG16(weights='imagenet',
include_top=False,
input_shape=(224, 224, 3))
conv_base.trainable = True
set_trainable = False
for layer in conv_base.layers:
if layer.name == 'block5_conv1':
set_trainable = True
if set_trainable:
layer.trainable = True
else:
layer.trainable = False
model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dropout(0.5))
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy',
optimizer=optimizers.RMSprop(lr=1e-5),
metrics=['acc'])
history = model.fit_generator(
train_generator,
steps_per_epoch=320, images
epochs=30,
validation_data=validation_generator,
validation_steps=90)
test_generator = test_datagen.flow_from_directory(
'../input/dogscatsdataset/test/',
target_size=(224, 224),
batch_size=50,
class_mode='binary')
test_loss, test_acc = model.evaluate_generator(test_generator, steps=90)
print('test acc:', test_acc)
输出
Found 12500 images belonging to 1 classes.
test acc: 0.504444420337677
我是 ML 新手,之前我使用从头开始构建的模型进行了相同的练习,具有相同的目录和测试集,并且效果很好。我得到的是Found 12500 images belonging to 2 classes,而不是我现在得到的1 class
【问题讨论】:
标签: python machine-learning keras deep-learning