1. 程式人生 > 實用技巧 >卷積神經網路CNN

卷積神經網路CNN

卷積網路

1 卷積網路格式

1.1.輸入層。

輸入層是整個神經網路的輸入

1.2.卷積層。

卷積層中的每一個節點的輸入只是上一層神經網路中的一小塊,這個小塊的大小有3 * 3或者5 * 5。卷積層試圖將神經網路中的每一個小塊進行更加深入的分析從而得到抽象程度更高的特徵。一般來說,通過卷積層處理的節點矩陣會變得更深,節點矩陣的深度會增加。

1.3.池化層。

通過池化層,縮小模型大小,提高計算速度。池化層的輸出通道數與輸入的通道數相同,每個通道單獨進行池化計算。池化層神經網路不會改變三維矩陣的深度,但是它可以縮小矩陣的大小。

池化操作有最大池化和平均池化兩種操作。

最大池化:每個區域的最大值,作用就是保留提取到的特徵的最大值,如果沒有提取到特徵,輸出會比較小。

平均池化:每個區域的平均值。

1.4.全連線層。

在經過多輪卷積層和池化層處理之後,在卷積神經網路的最後一般會由1到2個全連線層來給出最後的分類結果。經過幾輪的卷積層和池化層的處理之後,可以認為影象中的資訊已被抽象成了資訊含量更高的特徵。我們可以將卷積層和池化層看成自動影象特徵提取的過程。在特徵提取完成之後,仍然需要使用全連線層來完成分類任務。

1.5.Softmax層。

Softmax層主要用於分類問題。經過Softmax層,可以得到當前樣例中屬於不同種類的概率分佈情況。

1.6.BN層

BN層,歸一化,對歸一化的資料進行分佈重構;加快收斂速度,泛化能力強

1.7.啟用層

啟用函式是非線性函式,避免輸出是輸入的線性組合,增強網路的逼近能力。

2 搭建網路

2.1 匯入import

2.2 train,test:

告知要喂入網路的訓練集和測試集是什麼,指定訓練集的輸入特徵x_train和訓練集的標籤y_train,還可以指定測試集的輸入特徵x_test和測試集的標籤y_test

2.3 model=tf.keras.models.Sequential:

在Sequential()中搭建網路結構,逐層描述網路,相當於走一遍前向傳播

model = tf.keras.models.Sequential([網路結構])
model = tf.keras.models.Sequential([
    Conv2D(filters=6,kernel_size=(5,5),padding='
same'), # 卷積層 BatchNormalization(), # BN層 Activation('relu'), # 啟用層 MaxPool2D(pool_size=(2,2),strides=2,padding='same'), Dropout(0.2), #dropout層 ])

2.4 model.compile:

在compile()中配置訓練方法,告知訓練時選擇哪種優化器、損失函式、評測指標

model.compile(optimizer=優化器,loss=損失函式,metrics=["準確率"])
model.compile(optimizer='adam',
              loss = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False),
              metrics = ['sparse_categorical_accuracy'])

1.optimizer 優化器可選項

'sgd' or tf.keras.optimizers.SGD(lr=學習率,momentum=動量引數)
'adagrad' or tf.keras.optimizers.Adagrad(lr=學習率) 
'adadelta' or tf.keras.optimizers.Adadelta(lr=學習率)
'adam' or tf.keras.optimizers.Adam(lr=學習率,beta_1=O.9,beta_2=0.999) 

2.loss可選

'mse' or tf.keras.losses.MeanSquaredError() #均方差
'sparse_categorical_crossentropy' or tf.keras.losses.SparseCategoricalCrossentropy(from_logits=False)#交叉熵損失函式

3.Metrics可選 不太懂????

'accuracy':y_和y都是數值,如y_=[1]  y=[1]
'categorical_accuracy':對多分類問題,計算在所有預測值上的平均正確率
'sparse_categorical_accuracy':y_是數值,y是獨熱碼(概率分佈),如y_=[1]  y=[0.256,0.695,0.048]

2.5 model.fit:

在fit()中執行訓練過程,告知訓練集和測試集的輸入特徵和標籤,告知每個batch是多少,告知要迭代多少次訓練集。

model.fit(訓練集的輸入特徵,訓練集的標籤,batch_size= ,epoch= ,validation_data=(測試集的輸入特徵,測試集的標籤),validation_split=從訓練集劃分多少比例給測試集,validation_freq=多少次epoch測試一次)
history = model.fit(x_train, y_train, batch_size=32, epochs=5, validation_data=(x_test, y_test), validation_freq=1, callbacks=[cp_callback])

2.6 model.summary:

用summary()打印出網路的結構和引數統計

model.summary()

2.7 tf.keras.callbacks.ModelCheckpoint:

可以使用訓練好的模型而無需從頭開始重新訓練,或在您打斷的地方開始訓練,以防止訓練過程沒有儲存。 tf.keras.callbacks.ModelCheckpoint 允許在訓練的過程中結束時回撥儲存的模型。在每個epoch後儲存模型到filepath。

keras.callbacks.ModelCheckpoint(filepath, monitor='val_loss', verbose=0, save_best_only=False, save_weights_only=False, mode='auto', period=1)

1 引數

  • filepath: 儲存模型的路徑。

  • monitor: 被監測的資料。val_acc或val_loss。

    loss:訓練集損失值

    acc:訓練集準確率

    val_loss:測試集損失值

    val_acc:測試集準確率

  • verbose: 詳細資訊模式,0 或者1。0為不列印輸出資訊,1為列印。

  • save_best_only: 如果save_best_only=True,將只儲存在驗證集上效能最好的模型mode: {auto, min, max} 的其中之一。 如果save_best_only=True,那麼是否覆蓋儲存檔案的決定就取決於被監測資料的最大或者最小值。 對於val_acc,模式就會是max;而對於val_loss,模式就需要是min。在auto模式中,方式會自動從被監測的資料的名字中判斷出來。

  • save_weights_only: 如果 True,那麼只有模型的權重會被儲存 (model.save_weights(filepath)), 否則的話,整個模型會被儲存 (model.save(filepath))。

  • period: 每個檢查點之間的間隔(訓練輪數)。