TOP

學習筆記TF029:實現進階卷積網絡(一)
2017-10-09 13:34:56 】 瀏覽:8266
Tags:

經典數據集CIFAR-10,60000張32x32彩色圖像,訓練集50000張,測試集10000張。標注10類,每類圖片6000張。airplance、automobile、bird、cat、deer、dog、frog、horse、ship、truck。沒有任何重疊。CIFAR-100,100類標注。深度學習之父 Geoffrey Hinton和學生Alex Krizhevsky、Vinod Nair收集。圖片源于80 million tiny images數據集。State-of-the-art 3.5%錯誤率,GPU訓練十幾小時。詳細Benchmark和排名在 http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_results.html 。LeCun,現有卷積神經網絡已經解決CIFAR-10數據集問題。

根據Alex cuda-convnet模型修改,3000個batch,每個batch 128個樣本,達到73%正確率。GTX1080單顯卡幾十秒模型訓練時間。CPU慢很多。如用100k batch 結合學習速度decay(每隔一段時間下降學習速率一個比率),正確率可到86%。模型訓練參數100萬個,預測四則運算總量2000萬次。對weights進行L2正則化。圖片翻轉、隨機剪切等數據增強,制造更多樣本。每個卷積-最大池化層后用LRN層,增強模型泛化能力。

下載TensorFlow Models庫,使用其中提供CIFAR-10數據類。git clone https://github.com/tensorflow/models.git。models/tutorials/image/cifar10。

載入常用庫优乐棋牌app下载,NumPy、time,TensorFlow Models自動下載、讀取CIFAR-10數據類。

定義batch_size,訓練輪數max_steps,下載CIFAR-10數據默認路徑。

定義初始化weight函數,tf.truncated_normal截斷正態分布初始化權重。Weight加L2 loss ,做L2 正則化。減少特征或懲罰不重要特征權重,緩解特征過多導致過擬合。正則化幫助找到該懲罰的特征權重。為使用某個特征,需付出loss代價。L1正則制造稀疏特征,大部分無用特征權重被置0。L2正則讓特征權重不過大,特征權重較平均。wl控制L2 loss大小,tf.nn.l2_loss函數計算weight L2 loss,tf.multiply L2 loss 乘以wl,得最后 weight loss。tf.add_to_collection weight loss統一存在collection losses,計算神經網絡總體loss使用。

用cifar10類下載數據集,解壓、展開到默認位置。

用cifar10_input類 distorted_inputs函數產生訓練數據,包括特征、label,返回封裝tensor,每次執行生成一個batch_size數量樣本。Data Augmentation(數據增強),cifar10_input.distorted_inputs函數,隨機水平翻轉(tf.image.random_flip_left_right)、隨機剪切一塊24x24圖片(tf.random_crop)、設置隨機亮度對比度(tf.image.random_brightness、tf.image.random_contrast),數據標準化(tf.image.per_image_whitening,數據減均值,除方差,保證數據零均值,方差1)。獲得更多樣本,帶噪聲,一張圖片樣本變多張圖片,擴大樣本量,提高準確率。數據增強操作耗費大量CPU時間,distored_inputs用16個獨立線程加速任務,函數內部產生線程池,通過TensorFlow queue調度。

用cifar10_input.inputs函數生成測試數據,裁剪圖片正中間24x24大小區塊,數據標準化。

創建輸入數據placeholderx,特征、label。設定placeholder數據尺寸,batch_size定義網絡結構要用,數據尺寸第一個值樣本條數需要預先設定,不能設None。數據尺寸的圖片尺寸為24x24,裁剪后大小,顏色通道數3,彩色RGB三通道。

第一個卷積層,variable_with_weight_loss 函數創建卷積核參數初始化。卷積核大小5x5,3個顏色通道,64個卷積核,設置weight初始化函數標準差0.05。wl(weight loss)設0。tf.nn.conv2d函數對輸入數據image_holder卷積操作,步長stride設1,padding模式SAME,bias初始化0,卷積結果加bias,用ReLU激活函數非線化。用尺寸3x3,步長2x2最大池化層處理數據,尺寸、步長不一致,增加數據豐富性。tf.nn.lrn函數,LRN,處理結果。

LRN起于Alex用CNN參加ImageNet比賽論文。LRN模仿生物神經系統側抑制機制,對局部神經元活動創建競爭環境,響應較大值變得相對更大,抑制其他反饋較小神經元,增強模型泛化能力。用LRN后CNN Top1錯誤率降低1.4%。LRN對無上限邊界激活函數ReLU有用,從附近多個卷積核響應(Response)挑選較大反饋,不適合固定邊界能抑制過大值激活函數Sigmoid。

第二個卷積層,卷積核尺寸第三維度輸入通道數64,bias值全初始化0.1。先進行LRN層處理,再用最大池化層。

全連接層,把前面兩個卷積層輸出結果全部flatten,tf.reshape函數把每個樣本變成一維向量。get_shape函數獲取數據扁平化長度。variable_with_weight_loss函數初始化全連接層weight,隱含節點384,正態分布標準差0.04优乐棋牌app下载,bias初始化0.1。設非零weight loss值0.04,所有參數被L2正則約束,避免過擬合。ReLU激活函數非線性化。

第二個全連接層,隱含節點192。

最后一層优乐棋牌app下载,先創建weight,正態分布標準差設上一隱含層節點數倒數,不計入L2正則。Softmax操作放在計算loss部分,不需要對inference輸出softmax處理,就可以獲得最終分類,直接比較inference輸出各類數值大小。

整個卷積神經網絡從輸入到輸出流程。設計CNN,安排卷積層、池化層、全連接層分布和順序,超參數設置、Trick使用。卷積神經網絡結構:
conv1:卷積層和ReLU激活函數
pool1:最大池化
norm1:LRN
conv2:卷積層和ReLU激活函數
norm2:LRN
pool2:最大池化
local3:全連接層和ReLU激活函數
local4:全連接層和ReLU激活函數
logits:模型Inference輸出結果

計算CNN loss。softmax計算和cross entropy loss 計算合在一起,tf.nn.sparse_softmax_cross_entropy_with_logits。tf.reduce_mean計算cross entropy均值,tf.add_to_collection 添加cross e

請關注公眾號獲取更多資料



首頁 上一頁 1 2 3 下一頁 尾頁 1/3/3
】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇我的Python開發之路---微信網頁授.. 下一篇win7下從ruby源代碼編譯安裝