2017-10-11 14 views
0

私は、VGG16とInceptionV3を微調整する方法についてインターネットで多くの例を見てきました。たとえば、VGG16を微調整するときに、最初の25層が固定されるように設定する人もいます。 InceptionV3では、最初の172のレイヤーがフリーズされます。しかし、再ネットについてはどうですか?resnet50モデルで微調整する方法は?

from keras.applications.resnet50 import ResNet50 

base_model = ResNet50(include_top=False, weights="imagenet", input_shape=(input_dim, input_dim, channels)) 

.............. 

for layer in base_model.layers[:frozen_layers]: 
    layer.trainable = False 

を私はfrozen_layersを設定する必要があり、どのように:我々は微調整を行うと、以下のように、我々は、ベースモデルのいくつかの層を凍結しますか?実際には、VGG16、VGG19、ResNet50、InceptionV3などで微調整を行うと、何層のレイヤーを固定する必要があるのか​​分かりません。誰も私にどのようにこれらのモデルを微調整するための提案を与えることができますか?特に、これらのモデルで微調整を行うと、何層の層の人々がフリーズしますか?好奇心旺盛だ

+0

私たち自身の高密度レイヤーを鍛えるだけであれば、トランスファーラーニングと呼ばれています。 base_model(resnet、vggなど)のレイヤーを小さな学習率でトレーニングすると、微調整と呼ばれます。私は畳み込みブロックにいくつかの特別な意味があることを知っています。どのように微調整を行うためにベースモデルのレイヤーをフリーズするのですか? –

+0

私はこのブログでこれらを参照してください:[ビルディング - パワフル画像分類モデル - 非常に小さなデータを使用](https://blog.keras.io/building-powerful-image-classification-models-using-非常にlittle-data.html) –

答えて

0

.... VGG16モデルは23層の合計を持っている...(https://github.com/fchollet/keras/blob/master/keras/applications/vgg16.py


すべてのこれらのモデルは、同様のstrucutre持っている:畳み込み一連の

  • をいくつかの緻密層が続く層

これらのいくつかの緻密層どんなケラスがtopと呼ぶか。 (include_topパラメータのとおり)。

通常、この微調整は最後の高密度レイヤでのみ行われます。畳み込みレイヤー(画像を理解し、機能を特定する)に変更を加えずに、自分のクラスに合わせて上部を作成します。

人々は元のモデルが訓練されたのとまったく同じクラスを持たないため、しばしば独自のトップパートを作成します。彼らは最終的な部分を適応させ、最後の部分だけを訓練します。

したがって、include_top=Falseでモデルを作成してから完全にフリーズします。
これで、独自の高密度レイヤーを追加し、これらを訓練可能なままにします。

これは、これらのモデルの最も一般的な適応です。

他の種類の微調整の場合、おそらく明確なルールはありません。

+0

そのvggの間違いをお詫びします。私は人々が自分のデータにさらに適合させるために最後の畳み込みブロックを除いてvggネットワークを凍結し、最後の畳み込みブロックと小さな学習率の密なレイヤーを次のように調整することを意味します:[vgg16 fine - チューニング](https://blog.keras.io/img/imgclf/vgg16_modified.png) –

関連する問題