Q1:由於網速慢或者網絡中斷等原因,導致keras加載VGG16等模型權重失敗,從而程序出錯。
方法:可以直接刪除,重新下載。
Keras-Github-教程
https://github.com/fchollet/deep-learning-models
原始權重下載地址
https://github.com/fchollet/deep-learning-models/releases
tf模型權重百度雲下載地址
http://pan.baidu.com/s/1dE9giOD
注:1.從百度雲盤下載權重文件最快;
2.刪除文件時,采用 $ open .keras/models/ ,進入隱藏的文件夾,然后刪除。(mac系統)
Q2:如何離線讀取VGG16的訓練權重。
方法:以個人為例,
model = applications.VGG16(include_top=False,
weights='/Users/******/.keras/models/vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
其中,******是自己電腦的賬號名;vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5 是VGG16的權重文件;這樣就可以離線讀取VGG16的訓練權重了。
Q3: model.add(Flatten(input_shape=train_data.shape[1:])),這句話的理解。(僅在圖像識別這一塊)
如果輸入train_data.shape[0:],它會輸出這樣一個東西:[x1 , x2 , x3 , x4],其中x1表示樣本數,x2表示圖寬度,x3表示圖高度,x4表示通道數。一般來說,樣本數是不好指定的,所以一般只讀取train_data.shape[1:]。(在tensorflow下如此,在theano中,4個含義的順序好像不是這樣。)
原因:當初自己出錯是因為圖形的標簽是3類,我在 train_labels = np.array([0] * 1000 + [1] * 1000 + [2] * 1000) 操作之后,並沒有將它分成3類,即生成3維,
需要加上這樣一句代碼 train_labels = np_utils.to_categorical(train_labels, 3),此外相應的,要加上 from keras.utils import np_utils 。
Q5: for layer in model.layers[:15]:
layer.trainable = False
這句話是指將模型的前15層冰凍住,也就是在訓練網絡的過程中,前15層的網絡參數始終不發生變化。