事前トレーニング済みのCNN分類器を使用して、別の画像データセットに適用する


11

どのように考え、最適化前の訓練を受けた neural network別の問題に適用することを?事前トレーニング済みのモデルにさらにレイヤーを追加して、データセットでテストしますか?

たとえば、タスクがCNNを使用して壁紙グループを分類することであった場合、猫と犬の画像でトレーニングされた事前トレーニング済みネットワークを直接分類することはできませんが、どちらも画像分類子です。

回答:


15

?転送ラーニングは不利(@mediaのおかげで)である-ド読む (私にとって非常に有益なルックスなので、この回答の完全な1作るためにここに追加...)

あなたの質問への回答..(ここから始まります)

転移学習はあなたが探しているものです。

  • 画像のデータセットでたたみ込みニューラルネットワーク(Covnet)をトレーニングするなどのディープラーニングタスクが与えられた場合、最初の本能はネットワークを最初からトレーニングすることです。ただし、実際には、Covnetのようなディープニューラルネットワークには、多くの場合数百万の範囲の膨大な数のパラメーターがあります。小さなデータセット(パラメーターの数よりも小さいデータセット)でCovnetをトレーニングすると、Covnetの一般化能力に大きく影響し、しばしばオーバーフィッティングが発生します。

  • したがって、実際には、ImageNet(1.2Mラベル付きイメージ)などの大規模なデータセットでトレーニングされている既存のネットワークを、より小さなデータセットで引き続きトレーニング(つまり、逆伝播を実行)して微調整することがより頻繁にあります。データセットのコンテキストが元のデータセット(ImageNetなど)と大幅に異なることがなければ、事前トレーニング済みのモデルには、独自の分類問題に関連する機能がすでに学習されています。

いつモデルを微調整するのですか?

  • 一般に、データセットのコンテキストが事前トレーニング済みモデルがトレーニングされているデータセットと大幅に異なっていない場合は、微調整を行う必要があります。ImageNetのような大規模で多様なデータセットで事前にトレーニングされたネットワークは、初期のレイヤーの曲線やエッジなどの普遍的な機能をキャプチャします。

  • もちろん、データセットが非常に特定のドメイン(医療画像や中国語の手書き文字など)を表し、そのようなドメインの事前トレーニング済みネットワークが見つからない場合は、ネットワークを最初からトレーニングすることを検討する必要があります。

  • もう1つの懸念は、データセットが小さい場合、特にVGGネットワ​​ークの場合のように、ネットワークの最後の数層が完全に接続された層である場合、小さいデータセットで事前トレーニング済みネットワークを微調整すると、過剰適合につながる可能性があることです。私の経験から言えば、数千の生サンプルがあり、一般的なデータ拡張戦略(翻訳、回転、フリッピングなど)が実装されている場合、通常は微調整するとより良い結果が得られます。

  • データセットが本当に小さい場合、つまりサンプル数が1,000未満の場合、完全に接続されたレイヤーの前に中間レイヤーの出力をフィーチャ(ボトルネックフィーチャ)として取得し、線形分類子(SVMなど)をトレーニングすることをお勧めしますそれ。SVMは、小さなデータセットに決定の境界を描くのに特に適しています。

微調整テクニック

以下は、実装を微調整するための一般的なガイドラインです。

  • 一般的な方法は、事前トレーニング済みネットワークの最後のレイヤー(softmaxレイヤー)を切り捨て、それを私たち自身の問題に関連する新しいsoftmaxレイヤーで置き換えることです。たとえば、ImageNetの事前トレーニング済みネットワークには、1000カテゴリのsoftmaxレイヤーが付属しています。

  • 私たちのタスクが10カテゴリの分類である場合、ネットワークの新しいsoftmaxレイヤーは1000カテゴリではなく10カテゴリになります。次に、ネットワークで伝播を実行して、事前トレーニング済みの重みを微調整します。ネットワークが一般化できるように、相互検証が実行されていることを確認してください。

  • より低い学習率を使用してネットワークをトレーニングします。ランダムに初期化された重みと比較して、事前トレーニング済みの重みはすでに非常に優れていると予想しているため、それらをあまり速く、そしてあまり歪ませたくない。一般的な方法は、初期学習率をスクラッチトレーニングに使用されるものよりも10倍小さくすることです。

  • また、事前トレーニング済みネットワークの最初の数層の重みを固定することも一般的な方法です。これは、最初のいくつかのレイヤーが曲線やエッジなどの新しい機能に関連する普遍的な機能をキャプチャしているためです。これらの重みはそのままにしたいと考えています。代わりに、後続のレイヤーでデータセット固有の機能を学習することにネットワークを集中させます。

この場合、私が間違っていないかのように、それらを再度トレーニングする必要があります。壁紙はImage-netモデルのクラスではありません。モデルを最初から作成するのは難しくありません(できれば浅いモデルはここでも..)

私の回答のソースは、これらの素晴らしいコースからの翻訳です。

さらに読むために、


レイヤーを微調整しない場合のように、特徴抽出のみを行う場合。最後の密な層を線形分類器で置き換える理由はありますか?それを新しい密な層として維持し、すべての最下層を凍結したまま再トレーニングしてみませんか?それは、線形分類器のトレーニングが、新しい密な層のトレーニングよりも高速になるという理由だけですか?
CMCDragonkai

1
特徴抽出の場合、レイヤーを追加する必要はありませんが、プーリングやシェイプのサイズ変更などのいくつかのレイヤーが追加され、dimsに一致し、中間値を減らす可能性があります。確かに、NNよりも線形モデルをトレーニングする方が高速ですが、両方を試して、ユースケースに最適なものを確認できます。最後の高密度レイヤーのフリーズを解除し、当面の問題に合わせて追加のレイヤーをいくつか追加して再トレーニングするのが一般的な方法です
Aditya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.