Pytouchのfinetune使用詳細
finetuneは大域finetuneと局部finetuneに分けられます。まず、ローカルfinetuneの手順を紹介します。
1.固定パラメータ
finetuneは事前訓練モデルで微調整します。学習速度はあまり大きくないです。
今はよく分かりません。学習速度の低下の幅はもっと速くなります。このようにして以来、ステップのポリシーを使用する場合、ステップサイズはより小さくすることができます。
オリジナルデータから直接訓練するベースケースlrは普通0.01で、微調整は0.01より小さく、0.001にする。
直接訓練より小さいです。直接訓練のステップサイズは1000,000で、finetuneのステップサイズは50000です。
3.固定bnまたはキャンセルdropout:
batch normはトレーニングの効果に影響します。各batchに従って、サンプルの平均値と分散を追跡します。固定されたネットワークに対しては、bnはグローバルな値を使用すべきである。
4.フィルタパラメータ
トレーニング時、最適化器に対しては、変更が必要なパラメータだけが入ってきます。そうでないとエラーが発生します。
1.固定パラメータ
for name, child in model.named_children():
for param in child.parameters():
param.requires_grad = False
後に、ただ入ってくるだけです。逆のパラメータが必要です。そうでないとエラーが発生します。
filter(lambda param: param.requires_grad, model.parameters())
2.学習率を低くし、減衰を加速するfinetuneは事前訓練モデルで微調整します。学習速度はあまり大きくないです。
今はよく分かりません。学習速度の低下の幅はもっと速くなります。このようにして以来、ステップのポリシーを使用する場合、ステップサイズはより小さくすることができます。
オリジナルデータから直接訓練するベースケースlrは普通0.01で、微調整は0.01より小さく、0.001にする。
直接訓練より小さいです。直接訓練のステップサイズは1000,000で、finetuneのステップサイズは50000です。
3.固定bnまたはキャンセルdropout:
batch normはトレーニングの効果に影響します。各batchに従って、サンプルの平均値と分散を追跡します。固定されたネットワークに対しては、bnはグローバルな値を使用すべきである。
def freeze_bn(self):
for layer in self.modules():
if isinstance(layer, nn.BatchNorm2d):
layer.eval()
トレーニング時はモデル.train()がモードを修正します。freeze uここの後ろにあるはずです。4.フィルタパラメータ
トレーニング時、最適化器に対しては、変更が必要なパラメータだけが入ってきます。そうでないとエラーが発生します。
filter(lambda p: p.requires_grad, model.parameters())
以上のPytouchのfinetuneは詳細な解説を使って、小編集が皆さんに提供した内容を全部共有しています。参考にしていただければと思います。どうぞよろしくお願いします。