如何为我的模型选择使用哪些预训练权重?
How to choose which pre-trained weights to use for my model?
我是初学者,我很困惑如何选择预训练模型来改进我的模型。
我正在尝试使用模型的预训练权重创建猫品种分类器,比如说在数字数据集上训练的 VGG16,这会提高模型的性能吗?或者如果我只在数据库上训练我的模型而不使用任何其他权重会更好,或者两者都相同,因为那些预训练的权重只是一个起点。
此外,如果我使用针对猫与狗数据训练的 VGG16 的权重作为我的猫品种分类模型的起点,这是否有助于我改进模型?
能否提供更多信息,具体是什么分类?我看到你想对图像进行分类,哪种类型的图像(包含什么?)以及类?
一般性评论:如果您使用经过训练的模型,它当然必须符合您的需要。请记住,在给定数据集上训练的模型仅学习该数据集中包含的信息,并且可以对与训练数据集中的信息类似的信息进行分类/识别。
如果你想用 Y/N(二进制)分类器对包含动物的图像进行分类,(猫或非猫)你应该使用在不同动物上训练的模型,猫他们。
如果你想将猫的图像分类为 类 对应于猫的种族,比方说,你应该使用仅在猫图像上训练的模型。
我应该说你应该使用管道,包含步骤 1,然后是 2。
这实际上取决于您手头的数据集的大小,以及模型预训练的任务和数据与您的任务和数据的相关程度。如果您的任务相同,请阅读有关迁移学习 http://cs231n.github.io/transfer-learning/ 或域适应的更多信息。
I am trying to create a cat breed classifier using pre-trained weights of a model, lets say VGG16 trained on digits dataset, will that improve the performance of the model?
仍然有从数字中学习到的一般特征,例如边缘检测,可能对您的目标任务有用,所以这里的答案是也许。您可以在这里尝试只训练计算机视觉应用程序中常见的顶层。
Also if I use weights of the VGG16 trained for cat vs dog data as a starting point of my cat breed classification model will that help me in improving the model?
如果任务和数据更相关和相似,你的机会应该更好
既然你提到你是初学者,我会尽量比平时更冗长,所以请多多包涵。
神经模型如何识别图像
- 预训练模型中的图层存储了它们所训练的图像的多个方面,例如图案(直线、曲线)、图像中的颜色,用于确定图像是否属于特定 class 或不
- 对于每一层,它可以存储的内容的复杂性都会增加,最初它会捕获线或点或简单的曲线,但随着每一层的增加,表示能力会增加,并且它开始捕获诸如猫耳、狗脸、曲线等特征等等
下图来自 Keras 博客,展示了初始层如何学习表示点和线等简单事物,随着我们深入,它们开始学习表示更复杂的模式。
Read more about Conv net Filters at keras's blog here
使用预训练模型如何获得更好的结果?
当我们训练模型时,我们在最初创建这些表示时会浪费大量计算和时间,为了获得这些表示,我们也需要大量数据,否则我们可能无法捕获所有相关特征和我们的模型可能不那么准确。
所以当我们说我们想要使用预训练模型时,我们想要使用这些表示,所以如果我们使用在 imagenet 上训练的模型,它有很多猫图片,我们可以确定该模型已经有表示识别识别猫所需的重要特征,并将收敛到比我们使用随机权重更好的点。
如何使用预训练权重
因此,当我们说使用预训练的权重时,我们的意思是使用包含表示的层来识别猫,但丢弃最后一层(密集层和输出层),而是添加具有随机权重的新密集层和输出层。所以我们的预测可以利用已经学过的表征。
在现实生活中,我们在初始训练期间冻结预训练的权重,因为我们不希望底部的随机权重破坏学习到的表征。我们只有在具有良好的 class 化精度来微调它们之后才解冻表示,而且学习率也非常小。
使用哪种预训练模型
总是选择那些你知道有最多表示的预训练权重,这可以帮助你识别你感兴趣的class。
那么与在图像网络上训练的权重相比,使用 mnist 数字训练的权重会产生相对较差的结果吗?
是的,但是考虑到初始层已经学习了简单的模式,例如数字的直线和曲线,在大多数情况下,与从头开始相比,使用这些权重仍然会让您处于优势。
合理的权重初始化
要选择的预训练权重取决于您希望分类的 类 类型。由于您希望对猫品种进行分类,因此请使用经过类似任务训练的分类器的预训练权重。正如上面的答案所提到的,初始层学习边缘、水平或垂直线、斑点等东西。随着你深入,模型开始学习问题特定的特征。因此,对于一般任务,您可以使用 imagenet,然后针对手头的问题对其进行微调。
但是,拥有一个与您的训练数据非常相似的预训练模型会大有帮助。前段时间,我参加了Scene Classification Challenge where we initialized our model with the ResNet50 weights trained on Places365 dataset. Since, the classes in the above challenge were all present in the Places365 dataset, we used the weights available here,微调了我们的模型。这大大提高了我们的准确性,我们最终在排行榜上名列前茅。
您可以在 blog
中找到有关它的更多详细信息
此外,请了解迁移学习的优势之一是节省计算量。使用具有随机初始化权重的模型就像从头开始训练神经网络。如果你使用在 digits 数据集上训练的 VGG16 权重,那么它可能已经学到了一些东西,所以它肯定会节省一些训练时间。如果您从头开始训练模型,那么它最终会学习使用预训练数字分类器权重会学习到的所有模式。
另一方面,使用 Dog-vs-Cat 分类器的权重应该会给您带来更好的性能,因为它已经学会了检测爪子、耳朵、鼻子或胡须等特征。
我是初学者,我很困惑如何选择预训练模型来改进我的模型。
我正在尝试使用模型的预训练权重创建猫品种分类器,比如说在数字数据集上训练的 VGG16,这会提高模型的性能吗?或者如果我只在数据库上训练我的模型而不使用任何其他权重会更好,或者两者都相同,因为那些预训练的权重只是一个起点。
此外,如果我使用针对猫与狗数据训练的 VGG16 的权重作为我的猫品种分类模型的起点,这是否有助于我改进模型?
能否提供更多信息,具体是什么分类?我看到你想对图像进行分类,哪种类型的图像(包含什么?)以及类?
一般性评论:如果您使用经过训练的模型,它当然必须符合您的需要。请记住,在给定数据集上训练的模型仅学习该数据集中包含的信息,并且可以对与训练数据集中的信息类似的信息进行分类/识别。
如果你想用 Y/N(二进制)分类器对包含动物的图像进行分类,(猫或非猫)你应该使用在不同动物上训练的模型,猫他们。
如果你想将猫的图像分类为 类 对应于猫的种族,比方说,你应该使用仅在猫图像上训练的模型。
我应该说你应该使用管道,包含步骤 1,然后是 2。
这实际上取决于您手头的数据集的大小,以及模型预训练的任务和数据与您的任务和数据的相关程度。如果您的任务相同,请阅读有关迁移学习 http://cs231n.github.io/transfer-learning/ 或域适应的更多信息。
I am trying to create a cat breed classifier using pre-trained weights of a model, lets say VGG16 trained on digits dataset, will that improve the performance of the model?
仍然有从数字中学习到的一般特征,例如边缘检测,可能对您的目标任务有用,所以这里的答案是也许。您可以在这里尝试只训练计算机视觉应用程序中常见的顶层。
Also if I use weights of the VGG16 trained for cat vs dog data as a starting point of my cat breed classification model will that help me in improving the model?
如果任务和数据更相关和相似,你的机会应该更好
既然你提到你是初学者,我会尽量比平时更冗长,所以请多多包涵。
神经模型如何识别图像
- 预训练模型中的图层存储了它们所训练的图像的多个方面,例如图案(直线、曲线)、图像中的颜色,用于确定图像是否属于特定 class 或不
- 对于每一层,它可以存储的内容的复杂性都会增加,最初它会捕获线或点或简单的曲线,但随着每一层的增加,表示能力会增加,并且它开始捕获诸如猫耳、狗脸、曲线等特征等等
下图来自 Keras 博客,展示了初始层如何学习表示点和线等简单事物,随着我们深入,它们开始学习表示更复杂的模式。
Read more about Conv net Filters at keras's blog here
使用预训练模型如何获得更好的结果?
当我们训练模型时,我们在最初创建这些表示时会浪费大量计算和时间,为了获得这些表示,我们也需要大量数据,否则我们可能无法捕获所有相关特征和我们的模型可能不那么准确。
所以当我们说我们想要使用预训练模型时,我们想要使用这些表示,所以如果我们使用在 imagenet 上训练的模型,它有很多猫图片,我们可以确定该模型已经有表示识别识别猫所需的重要特征,并将收敛到比我们使用随机权重更好的点。
如何使用预训练权重
因此,当我们说使用预训练的权重时,我们的意思是使用包含表示的层来识别猫,但丢弃最后一层(密集层和输出层),而是添加具有随机权重的新密集层和输出层。所以我们的预测可以利用已经学过的表征。
在现实生活中,我们在初始训练期间冻结预训练的权重,因为我们不希望底部的随机权重破坏学习到的表征。我们只有在具有良好的 class 化精度来微调它们之后才解冻表示,而且学习率也非常小。
使用哪种预训练模型
总是选择那些你知道有最多表示的预训练权重,这可以帮助你识别你感兴趣的class。
那么与在图像网络上训练的权重相比,使用 mnist 数字训练的权重会产生相对较差的结果吗?
是的,但是考虑到初始层已经学习了简单的模式,例如数字的直线和曲线,在大多数情况下,与从头开始相比,使用这些权重仍然会让您处于优势。
合理的权重初始化
要选择的预训练权重取决于您希望分类的 类 类型。由于您希望对猫品种进行分类,因此请使用经过类似任务训练的分类器的预训练权重。正如上面的答案所提到的,初始层学习边缘、水平或垂直线、斑点等东西。随着你深入,模型开始学习问题特定的特征。因此,对于一般任务,您可以使用 imagenet,然后针对手头的问题对其进行微调。
但是,拥有一个与您的训练数据非常相似的预训练模型会大有帮助。前段时间,我参加了Scene Classification Challenge where we initialized our model with the ResNet50 weights trained on Places365 dataset. Since, the classes in the above challenge were all present in the Places365 dataset, we used the weights available here,微调了我们的模型。这大大提高了我们的准确性,我们最终在排行榜上名列前茅。 您可以在 blog
中找到有关它的更多详细信息此外,请了解迁移学习的优势之一是节省计算量。使用具有随机初始化权重的模型就像从头开始训练神经网络。如果你使用在 digits 数据集上训练的 VGG16 权重,那么它可能已经学到了一些东西,所以它肯定会节省一些训练时间。如果您从头开始训练模型,那么它最终会学习使用预训练数字分类器权重会学习到的所有模式。
另一方面,使用 Dog-vs-Cat 分类器的权重应该会给您带来更好的性能,因为它已经学会了检测爪子、耳朵、鼻子或胡须等特征。