Tensorflow卷積神經網路

2021-08-09 07:34:22 字數 1800 閱讀 2521

卷積神經網路(convolutional neural network, cnn)是一種前饋神經網路, 在計算機視覺等領域被廣泛應用. 本文將簡單介紹其原理並分析tensorflow官方提供的示例.

關於神經網路與誤差反向傳播的原理可以參考作者的另一篇博文bp神經網路與python實現.

卷積是影象處理中一種基本方法. 卷積核是乙個nxn的矩陣通常n取奇數, 這樣矩陣就有了中心點和半徑的概念.

對影象中每個點取以其為中心的n階方陣, 將該方陣與卷積核中對應位置的值相乘, 並用它們的和作為結果矩陣中對應點的值.

下面的**展示了卷積的計算過程:

上述操作處理影象得到新影象的操作稱為卷積, 卷積得到的結果矩陣被稱為特徵圖(feature map). 灰度圖使用乙個矩陣便能表示, rgb影象則需要3個矩陣. 也就是說, 1個rgb影象使用乙個卷積核卷積會得到3個feature map.

若卷積核中各元素和為1則影象亮度不變, 若小於1則變暗, 大於1則會變亮.

卷積核的中心無法對準原影象中邊緣的畫素點(與邊緣距離小於卷積核半徑), 若要對邊緣的點進行計算必須填充(padding)外部缺少的點使卷積核的中心可以對準它們. 常用的填充策略有:

特殊的卷積核可以實現特殊的效果:−1

−1−1

−18−

1−1−

1−1

−2000−1

00−1

0 下面四張分別為:

**, 該文章對卷積進行了更生動地介紹

卷積數學定義可以參考卷積總結 和 我對卷積的理解

一般認為人的視覺認知是從區域性到全域性的,而影象的空間聯絡也是區域性的畫素聯絡較為緊密,而距離較遠的畫素相關性則較弱.

同理, 每個神經元其實沒有必要對全域性影象進行感知, 只需要與區域性影象建立連線. 在網路的更深層將神經元的區域性感知進一步綜合就可以了解到全域性資訊.

採用區域性感知的方法減少了需要訓練的權值數. 在實際應用中影象的解析度和訓練迭代次數都是有限的, 更少的權值數通常會帶來更高精度.

在卷積神經網路中對於同乙個卷積核, 所有卷積層神經元和影象輸入層的連線使用同乙個權值矩陣.

權值共享進一步減少了所需訓練的權值數, 乙個卷積層的權值數變為了卷積核中元素個數.

權值共享隱含的原理是: 影象的一部分的統計特性與其他部分是一樣的, 在影象某一部分學習到的特徵也能應用到其它部分上.

從上文關於特殊卷積核的描述中可以得知, 一種卷積核通常只能提取影象中的一種特徵. 且權值共享使得連線可以訓練的權值數大為減少. 為了充分提取特徵通常採用使用多個卷積核的方法.

通過卷積學習到的影象特徵仍然數量巨大, 不便直接進行分類. 池化層便用於減少特徵數量.

池化操作非常簡單, 比如我們使用乙個卷積核對一張進行過濾得到乙個8x8的方陣, 我們可以將方陣劃分為16個2x2方陣, 每個小方陣稱為鄰域.

用16個小方陣的均值組成乙個4x4方陣便是均值池化, 類似地還有最大值池化等操作. 均值池化對保留背景等特徵較好, 最大值池化對紋理提取更好.

隨機池化則是根據畫素點數值大小賦予概率(權值), 然後按其加權求和.

TensorFlow實現高階的卷積神經網路

本人使用的資料集是cifar 10。這是乙個經典的資料集,許多 也都是在這個資料集上進行訓練。使用的卷積神經網路是根據alex描述的cuda convnet模型修改得來。在這個神經網路中,我使用了一些新的技巧 1 對weights進行了l2的正則化 2 將影象進行翻轉 隨機剪下等資料增強,製造了更多...

基於tensorflow2實現卷積神經網路

利用tensorflow2中的api實現乙個簡單的卷積神經網路,完成梯度下降的操作並繪製訓練集和測試集準確率曲線。資料集在這裡 資料分布 訓練集數量為209,測試集數量為50 import numpy as np import matplotlib.pyplot as plt import tens...

Tensorflow 筆記 卷積神經網路

參考鏈結 卷積 convolutional 有效提取特徵的方法。一般用乙個正方形卷積核,遍歷上的每乙個畫素點。與卷積核重合區域內相對應的每乙個畫素值乘卷積核內相對應點的權重,然後求和,再加上偏置後,最後得到輸出中的乙個畫素值。一張解析度僅僅是 28x28 的黑白影象,就有近 40 萬個待優化的引數。...