使用殘差網路實現MNIST手寫數字識別

2021-10-05 04:41:43 字數 1547 閱讀 6897

在第二步中,我們根據輸入和輸出的尺寸是否相同,分為identity_block和conv_block,每種block都有如下兩種模式:3卷積和2卷積形式,3卷積的速度的要更快一些。定義identity_block層的**如下,下面是有3個卷積層,在輸出的時候把輸入值x_input和經過3層卷積層後輸出的x相加,使用啟用函式relu後輸出得到result

下面是定義conv_block模組,由於該模組定義時輸入和輸出尺度不同,所以我們使用乙個卷積層改變原來輸入x_input的尺寸;再和3層卷積層操作後輸出的x進行融合,通過乙個啟用函式relu,得到result

輸入我們要使用的值x1,由x1經過一層卷積、池化等操作後成為殘差網路的輸入,在下面的**中我們給出了3個x2,其中乙個是使用convolutional_block函式求出的,另外兩個是使用identity_block函式求出,乙個為block b,乙個為block c,大小都是14x14x246,經過reshape操作後大小變為7x7x256. 最後是乙個全連線層,全連線層這裡使用到了droupout函式

建立損失函式,使用交叉熵來計算:

初始化變數,每100次訓練輸出一次值出來;

最後是我們輸出的結果:

可以看到準確率已經達到97.4%,我們訓練次數越多,這個效果會更加好,下面我們把訓練次數增加到20000次,結果顯示準確率達到了98.2%

總結:本節用tensorflow實現了乙個殘差網路,通過**可以發現,殘差網路的設定並不難,只需要把經過卷積和池化操作後的輸出值和輸入值相加就得到了殘差網路的輸出。我們可以發現設定了殘差網路後的效果也是很好的,訓練20000次的準確率已經有98%了。讀者如果有興趣的話,可以多設定幾個卷積層進行實驗,看看最終的結果會如何,同時也可以利用我們前兩節講的儲存模型方法來把我們訓練後的model儲存下來,以方便下次再使用。

關注小鯨融創,一起深度學習金融科技!

深度殘差網路

深度殘差學習 deep residual learning 的思想 在residual net中 1 identity 為恒等對映,此條路徑一直存在 2 f x 為需要學習的殘差函式 residual function h x x f x 問題的重新表示或預處理會簡化問題的優化 假設我們期望的網路層...

殘差網路雜記

深度增加的乙個問題在於這些增加的層是引數更新的訊號。梯度是從後向前傳播的,增加網路深度後,比較靠前的層梯度會很小。當網路更深時意味著引數空間更大,優化問題變得更難,因此簡單地去增加網路深度反而出現更高的訓練誤差。殘差網路resnet設計一種殘差模組讓我們可以訓練更深的網路。殘差模組在輸入和輸出之間建...

殘差神經網路 殘差網路學習心得

殘差網路介紹 resnets是由殘差塊構建的,首先先解釋一下什麼是殘差塊。這是乙個兩層神經網路在l層進行啟用。計算過程是從a l 開始,首先進行線性啟用 根據這個等式,通過a l 算出z l 1 即a l 乘以權重矩陣再加上偏差因子,然後通過非線性relu啟用得到a l 1 隨後我們再進行線性啟用,...