迁移学习或微调

Posted

技术标签:

【中文标题】迁移学习或微调【英文标题】:Transfer learning or fine-tuning 【发布时间】:2022-01-11 14:10:10 【问题描述】:

请添加一些上下文来解释代码部分(或检查您是否没有错误地将所有问题格式化为代码)

                                               include_top=False, 
                                               weights='imagenet')

x = base_model.output
x = tf.keras.layers.GlobalAveragePooling2D()(x)
x = se_model.input,outputs=prediction_layer)



return model

【问题讨论】:

【参考方案1】:

当您下载基本模型时,它会下载其架构及其权重。从单台 PC 训练这些高级模型是不可能的。这就是为什么我们从互联网上下载预训练模型,然后使用我们自己的数据集重新训练它们来微调它们。

# Fine-tune from this layer onwards
for layer in model.layers[:fine_tune_at]:
    layer.trainable=False
for layer in model.layers[fine_tune_at:]:
    layer.trainable=True

正如您在上面看到的,您正在冻结预训练模型的初始层的权重,因为您不想搞砸它,只需要根据您的 I/O 更改最后一个输出层。

【讨论】:

那么这种结构是在微调 DenseNet 模型吗? 从这里代码中,您将获得一个准备好迁移学习的模型,完整代码,在调用此方法后,您将在您的数据集上调用此函数返回的模型上的拟合函数选择。希望你现在明白了。 @deny 我们基本上只微调最后一层。如果我们没有设置“.trainable = False”,我们将微调整个 DenseNet。关键是除了最后一层之外的其他层包含非常有用的信息,这些信息不容易改进,因此我们尽量不要把它弄乱,只更新最后一层。您可能还会遇到一些示例,其中您甚至不更改最后一层而是添加一个新层,因为最后一层也包含非常有用的信息。一个非常常见的例子是 BERT。 谢谢!这意味着上面的代码只调整了网络的最后一层。你是指全连接层还是哪一层?

以上是关于迁移学习或微调的主要内容,如果未能解决你的问题,请参考以下文章

小白学习PyTorch教程十二迁移学习:微调VGG19实现图像分类

Pytorch Note56 Fine-tuning 通过微调进行迁移学习

YOLOv4 迁移学习/微调

手把手写深度学习(13):如何利用官方预训练模型做微调/迁移学习?(以Resnet50提取图像特征为例)

手把手写深度学习(14):如何利用官方预训练模型做微调/迁移学习?(以Resnet50提取图像特征为例)

小白学习PyTorch教程十四迁移学习:微调ResNet实现男人和女人图像分类