2017-06-22 104 views
2

我想用1003個類重新訓練初始模型,其中前1000個類與imagenet(初始模型)相同。因此,我採用了初始模型,並提取了最終的圖層權重,並添加了3個列。我彈出最後一層,創建了另一個1003個類的圖層,並且我改變了權重,因爲前1000個類的權重與最初相同但是訓練的準確性是從0開始的,我沒有想到。究竟是怎麼回事?初始添加新圖層

這是我的代碼

base_model = InceptionV3(weights='imagenet', include_top=False) 
m = InceptionV3(weights='imagenet', include_top=True) 
a=m.layers[312].get_weights() 
k=np.random.normal(size=[2048,3]) 
k=k/3 
l=np.random.normal(size=[3]) 
l=l/3 
a[0]=np.concatenate((a[0],k),axis=1) 
a[1]=np.concatenate((a[1],l),axis=0) 

x = base_model.output 
x = GlobalAveragePooling2D()(x) 

predictions = Dense(nb_classes, activation='softmax')(x) 
model = Model(input=base_model.input, output=predictions) 
model.layers[312].set_weights(a) 

回答

0

這聽起來像你正在嘗試做一些轉移學習(即使用以來V3模型,一組不同的圖像比它最初訓練做分類)。有關於這個問題在這裏 https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0

基本上所有你需要做的就是把你的訓練圖像到每個班級命名的文件夾(你將有1003個文件夾)一個偉大的教程,並運行retrain.py腳本(包含在教程)。你想確保rebin.py運行在新的圖像文件夾上。