ディープ学習とKerasを初めて習得しました。事前に重み付けされた初期化重み= 'imagenet'は、Kerasでモデルを定義するために使用されたときの意味ですか?Kerasでモデルを定義する
ResNet50(weights='imagenet')
ありがとうございます!
ディープ学習とKerasを初めて習得しました。事前に重み付けされた初期化重み= 'imagenet'は、Kerasでモデルを定義するために使用されたときの意味ですか?Kerasでモデルを定義する
ResNet50(weights='imagenet')
ありがとうございます!
このコード行は、ResNet50
という名前のネットワークアーキテクチャを作成します(詳細はhereを参照してください)。 weights='imagenet'
はに、imagenet
データセットで訓練されたこのネットワークの重みをロードします。この情報がなければ、Keras
はネットワークアーキテクチャを準備することしかできませんが、モデルの目的を知らないので、重みを「良い」値に設定することはできません。これは、データセットを指定することによって決定されます。
他のデータセットを使用している場合は、事前に訓練されたモデルとしてモデルを使用しています。このテクニックの詳細については、hereを参照してください。一般的な考え方は、モデルが複雑な(画像)データセットで訓練された後、エッジ、コーナーなどの非常に基本的なフィーチャを検出するために、最下位層(ほとんどの場合は畳み込み)で学習します。これは、この基本機能を再度検出することを学ぶ必要がないため、モデルが自分のデータセットをより迅速に分析することを学ぶのに役立ちます。
ご返信ありがとうございます。しかし、私は別のデータセットを使用しています。他のデータセットで訓練されたネットワークのウェイトを使用することで、私のモデルが学習するのにどのように役立つのですか(または、事前に訓練されたモデルからウェイトを使用する意義は何ですか?) –
@AKSHAYAAVAIDYANATHAN – FlashTek
@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です。 追加カスタム層に示すように
ことのほかに、我々はまた、あなたの質問が解決されている場合
それは興味深い説明です。ありがとう。 –
、あなたがこのトピックを閉鎖するソリューションとして最も有用な答えをマークしなければならないネットワークの後層を固執することができます。 – FlashTek