2017-09-04 2 views
1

ディープ学習とKerasを初めて習得しました。事前に重み付けされた初期化重み= 'imagenet'は、Kerasでモデルを定義するために使用されたときの意味ですか?Kerasでモデルを定義する

ResNet50(weights='imagenet') 

ありがとうございます!

+0

、あなたがこのトピックを閉鎖するソリューションとして最も有用な答えをマークしなければならないネットワークの後層を固執することができます。 – FlashTek

答えて

4

このコード行は、ResNet50という名前のネットワークアーキテクチャを作成します(詳細はhereを参照してください)。 weights='imagenet'はに、imagenetデータセットで訓練されたこのネットワークの重みをロードします。この情報がなければ、Kerasはネットワークアーキテクチャを準備することしかできませんが、モデルの目的を知らないので、重みを「良い」値に設定することはできません。これは、データセットを指定することによって決定されます。

他のデータセットを使用している場合は、事前に訓練されたモデルとしてモデルを使用しています。このテクニックの詳細については、hereを参照してください。一般的な考え方は、モデルが複雑な(画像)データセットで訓練された後、エッジ、コーナーなどの非常に基本的なフィーチャを検出するために、最下位層(ほとんどの場合は畳み込み)で学習します。これは、この基本機能を再度検出することを学ぶ必要がないため、モデルが自分のデータセットをより迅速に分析することを学ぶのに役立ちます。

+0

ご返信ありがとうございます。しかし、私は別のデータセットを使用しています。他のデータセットで訓練されたネットワークのウェイトを使用することで、私のモデルが学習するのにどのように役立つのですか(または、事前に訓練されたモデルからウェイトを使用する意義は何ですか?) –

+1

@AKSHAYAAVAIDYANATHAN – FlashTek

3

@FlashTekの回答に続いて、このモデルをデータセットでトレーニングすることもできます。次のコードで

ルック:上記のコードで

model = applications.ResNet50(weights = "imagenet", include_top=False, 
input_shape = (img_width, img_height,3)) 


# Freeze the layers which you don't want to train. Here I am freezing the first 30 layers. 
for layer in model.layers[0:30]: 
    layer.trainable = False 

for layer in model.layers[30:]: 
    layer.trainable = True 

#Adding custom Layers 
x = Flatten()(model.output) 
# x = Dense(1024, activation="relu")(x) 
# x = Dropout(0.5)(x) 
# x = Dense(1024, activation="relu")(x) 
# x = Dropout(0.5)(x) 
x = Dense(1024, activation="relu")(x) 
predictions = Dense(2, activation="softmax")(x) 

我々はlayer.trainableを割り当てることによって、私たちは私たちのデータセットで訓練する必要がどのように多くの層resnetの指定することができますいずれかにそれを訓練する場合はtrueあなたのデータセット、そうでない場合はfalseです。 追加カスタム層に示すように

ことのほかに、我々はまた、あなたの質問が解決されている場合

+0

それは興味深い説明です。ありがとう。 –