我有一个包含 3 个类 container.RegisterSingleton<MapperProvider>();
、animals
和 landscapes
的数据集。每个数据集只有 100 张图像,我正在尝试使用 ResNet34 + fastai 训练分类器,但我遇到了几个问题。
第一个是我认为我的模型没有正确训练。当我使用 lr_finder 时,我的验证损失是 buildings
,除非这是预期的:
然后我运行了 10 个 epoch。它看起来要么学习得很好,要么像地狱一样过度拟合。
现在当我训练 10 个 epoch 时,图表开始振荡,这告诉我它不能再学习了。准确性看起来不错(除非它过度拟合)所以我决定使用我的验证集来看看我的模型实际上是如何做的:
因为我有 300 张图片,240 张在 train 文件夹中,60 张在 test 文件夹中。我的测试图像被标记,因为我想对其进行准确度评分。这是我运行的单元格:
na
这是我遇到的错误:
path = '/content/dataset/'
data_test = ImageList.from_folder(path).split_by_folder(train='train', valid='test').label_from_re(file_parse).transform(size=512).databunch().normalize(imagenet_stats)
learn = cnn_learner(data, models.resnet50, metrics=[accuracy, top_1],callback_fns=ShowGraph)
learn.load('stage-2')
答案 0 :(得分:0)
您的方法几乎没有问题:
您提到您使用 resnet 34 进行训练,然后保存其权重。然而,在测试时,您正在使用 resnet 50 并尝试加载 resnet 34 的权重,但由于不同的架构(层和参数)而无法正常工作。
如果您在同一个 NB 中进行测试,您可以在创建训练和有效数据集本身的同时添加测试数据集,并使用 2 行代码获得对整个数据集的预测。快速示例:
test_imgs = (path/'cars_test/').ls()
data.add_test(test_imgs)
learn.data = 数据
preds = learn.get_preds(ds_type=DatasetType.Test)
如果您打算在不同的 nb 中使用它,请尝试使用 model.export 来保存模型、其权重、数据和所有信息。我认为杰里米在他的 NB 和课程中做到了这一点。