fine-tuning的二三事

日常的应用中,我们会很经常遇到一个问题:

如何应用强大的model(比如ResNet)去训练我们自己的数据?

考虑到这样的几个事实:

  1. 通常我们自己的数据集都不会大(<1w)
  2. 从头开始训练耗时

解决方法就是fine-tuning.


方式

参考CS231的资料,有三种方式

  • ConvNet as fixed feature extractor.
    其实这里有两种做法:
    (1) 使用最后一个fc layer之前的fc layer获得的特征,学习个线性分类器(比如SVM)
    (2) 重新训练最后一个fc layer
  • Fine-tuning the ConvNet.
    固定前几层的参数,只对最后几层进行fine-tuning
  • Pretrained models.
    这个其实和第二种是一个意思,不过比较极端,使用整个pre-trained的model作为初始化,然后fine-tuning整个网络而不是某些层

选择

考虑两个问题:

  • 你的数据集大小
  • 你的数据集和ImageNet(假设在ImageNet上训练的)的相似性

分为四种情况,解决方法基于的原则就是:

NN中的低层特征是比较generic的,比如说线、边缘的信息,高层特征是Dataset Specific的,基于此,如果你的数据集和ImageNet差异比较大,这个时候你应该尽可能的少用pre-trained model的高层特征.

  1. 数据集小(比如<5000),相似度高

    这是最常见的情况,可以仅重新训练最后一层(fc layer)

  2. 数据集大(比如>10000),相似度高

    fine-tuning后几层,保持前面几层不变或者干脆直接使用pre-trained model作为初始化,fine-tuning整个网络

  3. 数据集小,相似度低

    小数据集没有办法进行多层或者整个网络的fine-tuning,建议保持前几层不动,fine-tuning后几层(效果可能也不会很好)

  4. 数据集大,相似度低

    虽然相似度低,但是数据集大,可以和2一样处理

从上面我们可以看出,数据集大有优势,否则最好是数据集和原始的相似度比较高;如果出现数据集小同时相似度低的情况,这个时候去fine-tuning后几层未必会有比较好的效果.

choise

Caffe中如何进行fine-tuning

Caffe做fine-tuning相对tensorflow很简单,只需要简单修改下配置文件就行了.

此处假设你的数据集比较小,同时相似度比较高,仅需重新训练最后一层(fc)的情况.

(1) 降低solver中lr和stepsize

这个很明显,因为相似度比较高我们可以期望原始获得的feature和需要的是很接近的,此时需要降低学习率(lr)和迭代次数(stepsize).

solver.prototxt

(2) 修改最后一层fc的名字,设置好lr_mult

应为需要训练最后一层,我们把之前的层的学习率设置的很低(比如0.001),或者你干脆设置为0,最后一层设置一定的学习率(比如0.01),所以需要乘以10.

deploy.prototxt

(3) 训练

其实就已经改好了,是不是很简单,按照之前标准化的训练测试就好了

知乎上fine-tuning的介绍上有更加详细的介绍,可以移步去看.


参考

(1) NodYoung的博客

(2) CS231的transfer-learning

(3) 知乎上关于caffe下做fine-tuning的介绍

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VITS(Variational Inference for Text-to-Speech)是一种端到端的文本到语音合成方法,它可以将文本转化为自然流畅的语音。VITS-Fast Fine-Tuning是对VITS模型进行快速微调的方法。 在传统的语音合成任务中,需要大量的语音对齐标注数据来训练模型。然而,这个过程非常耗时和昂贵。VITS-Fast Fine-Tuning的目标就是通过少量的标注数据来快速微调已有的VITS模型,以在新的任务上取得更好的性能。 VITS-Fast Fine-Tuning方法的关键在于使用变分推断(variational inference)来构建先验和后验分布。通过这个方法,我们可以使用其他大型语音合成数据集训练好的模型作为先验分布,然后使用少量目标任务的标注数据来估计后验分布。这样一来,我们就能够在新任务上快速微调VITS模型。 具体而言,VITS-Fast Fine-Tuning的过程分为两步。第一步是预训练,它使用大型语音数据集来训练VITS模型,并生成一个先验分布。第二步是微调,它使用目标任务的标注数据来调整VITS模型的参数,以获得更好的性能。由于预训练的先验分布已经包含了一定的知识,微调的过程可以更快速和高效。 总之,VITS-Fast Fine-Tuning是一种用于快速微调VITS模型的方法。它利用变分推断和预训练的先验分布,通过少量目标任务的标注数据来优化模型性能。这个方法可以加快语音合成模型的训练过程,降低训练的时间和成本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值