【发布时间】:2018-10-17 01:37:48
【问题描述】:
我想将使用在 imagenet 上预训练的 VGG16 模型的分类器与不使用 imagenet 权重的分类器进行比较,因此我使用加载模型
model = applications.VGG16(weights=None, include_top=False, input_shape=(img_width, img_height, 3))
根据Keras documentation,使用“weights=None”会随机初始化权重。
我现在的问题是神经网络总是给出相同的输出,即使在训练了多个 epoch 并尝试了不同的学习率之后,它总是将所有图像预测为同一类。
我认为输入数据(2 个不同类别的图像)或我的代码不是问题,因为在使用 imagenet 权重进行初始化和训练时,我的分类器学得很好,在测试集上达到了 90% 的准确率。
可能是什么问题?也许权重初始化?但是我不知道在加载这样的模型时如何使用不同的初始化器
【问题讨论】:
-
如果你预定义了权重会发生什么?它仍然提供相同的课程吗?
-
正如您在问题中提到的,它总是预测同一类,您的网络可能偏向于该类。检查您的数据集是否已正确隔离并有足够的数据从头开始训练
-
@deathangel908 我不确定在加载应用程序时如何在 Keras 中执行此操作。
-
@thefifthjack005 我的训练数据中有 2:1 的类拆分。我只有 360 个不同的示例,但我正在使用数据增强来人为地增加它。我知道这是一个非常少量的数据,但是在使用预训练模型时效果很好
-
如果您正在批量训练,请检查两个类的数据是否作为每批中的训练示例传递,以便模型能够在每批中查看两个类的数据。我的观点是,很难从头开始在 vgg 上训练具有小数据集的模型,因为它有很多参数需要优化。所以更喜欢微调模型。
标签: python tensorflow machine-learning neural-network keras