【问题标题】:Model recognizing test dataset as one class将测试数据集识别为一类的模型
【发布时间】:2020-12-16 11:22:40
【问题描述】:

我尝试使用迁移学习来训练识别猫和狗的模型。真实数据集有大约 25,000 张训练图像和 12,500 张测试图像。

我创建了目录traintest(用于我的验证集),每个目录中都有catsdogs 子目录。真实train数据集中dogs的文件名格式为dog.1, dog.2,dog.3...,而cat的文件名格式为cat.1, cat.2, cat.3。 ..我成功地将文件拆分到正确的子目录中

在真正的测试文件夹中,文件名只有1、2、3、4...12,500,包括dogscats这两个图像

我已经以大约 98% 的验证准确率训练了我的模型,但是当我加载测试文件进行预测时,我得到了输出 Found 12500 images belonging to 1 classes。我需要两个类,01

当我检查我创建的目录长度时,情况并非如此。不知道哪里弄错了

所有包导入

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


    【解决方案1】:

    根据Keras' flow_from_directory documentation关于directory的说法:

    每个类应该包含一个子目录。

    所以测试文件应该在cats & dogs 子目录下(作为训练和验证数据)。

    Keras 假设所有图像都属于一个类,因为您没有另外指定。需要目录拆分作为标记数据的方法。如果数据未标记(所有cats & dogs 图像混合在一起),则无法正确评估模型。

    【讨论】:

    • 是的,你是对的。我最近想通了,我已经进行了更正。但是,我的预测不是连续的,我不记得改组数据了。这正常吗?
    • 不确定我是否正确理解了您的问题,但无需重新整理测试数据。在评估模型时,它的权重不会更新,因此输入数据的任何顺序都应该产生相同的结果。至于训练/验证数据,这确实会产生影响,因为模型在拟合时正在更新。
    • 不维护测试数据的顺序。我没有洗牌
    • 按文件名字母数字升序读取数据。但是,无论如何,测试集中数据的顺序并不重要。
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2011-10-13
    • 2016-10-18
    • 1970-01-01
    • 2021-12-23
    • 2021-01-31
    • 2020-05-14
    • 2012-01-25
    相关资源
    最近更新 更多