使用预训练模型训练自己的数据集,分类的类别是不是不能太多?

我想使用别人预训练好的模型(数据集:ImageNet,模型:VGG19)来继续训练自己的数据集,但是因为只训练vgg19的全连接层参数,前面的卷积层参数都是冻结的,会不会最终的分类效果不好啊?我的类别是不是不能分的太多?有没有佬哥尝试过。

自己的数据集数据量太少就只修改softmax层,

比较多就softmax和softmax前一两层,

很多就softmax和softmax前几层。

指导原则:数据量越少,冻结的层可以越多,新训练的层可以越少;数据量越多,冻结的层可以越少,新训练的层可以越多。

(但也不一定,可以多尝试下)

PS:为了加快训练,可以预先把所有数据在最后一个冻结层的激活输出保存起来;以它作为输入,只训练后半截新网络,大大节省时间。训练好了再拼接起来。

其实也是要看你训练的数据是不是在ImageNet中有的相关类别数据,如果有的话,这样提取特征的效果会比较好,因为预训练的权重包含了已经有的类别。如果是新的类别的话,需要进行尝试,因为不同预训练权重对于不同的数据训练的效果,或者需要修改的层数也是不同的,需要经过实验来测试,但是其实修改最后一层的效果会稍微好一些,不会将之前的权重破坏掉。

建议:修改最后一层,或者最后面在加上一层,放自己的分类数

"只训练vgg19的全连接层参数,前面的卷积层参数都是冻结的 "  这个是你的前提设置吗?类别多少应该不是影像性能的主要原因,数据分布和数据集质量比较重要。

如果是你的前提设置,性能不好可以尝试后面多增加一些层进行训练。

如果不是,可以用预训练好的模型当作训练的初始化参数,你继续进行整体模型的重训练。

总之,效果还是要你自己动手进行实验验证,别人的经验与你的情况未必是完全一致的。