2017-09-04 69 views
1

我是深度學習和凱拉斯的新手。什麼是預訓練權重初始化權重='imagenet'是什麼意思用於在Keras中定義模型?在凱拉斯定義模型

ResNet50(weights='imagenet') 

謝謝!

+0

如果您的問題已經解決了,你應該標記最有用的答案,解決關閉這個主題粘層。 – FlashTek

回答

4

此代碼行創建一個名爲ResNet50的網絡體系結構(您可以找到關於它的更多信息here)。 weights='imagenet'使得Keras加載該網絡的權重,該網絡已經在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) 

在上面的代碼中,我們可以是指定我們如何RESNET的許多層對我們的訓練數據集通過分配layer.trainable是真就訓練它你的數據集或否則爲false。

除此之外的,我們也可以在網絡後,如圖添加自定義層

+0

這是一個有趣的解釋。謝謝。 –