當前位置:
首頁 > 最新 > 用Tensorflow搭建卷積神經網路

用Tensorflow搭建卷積神經網路

卷積神經網路(convolutional neural networks,簡稱CNN)它已經在很多實際應用中獲得了優秀的結果,特別是在圖像的識別領域。本文將基於NotMnist數據集,使用tensorflow搭建卷積網路,完成分類功能。

關於對數據集的讀取和預處理,在之前的一篇《基於Tensorflow搭建神經網路》里講過,這裡就不在重複講述,小夥伴們可以去這篇文章里找到相關代碼。

這裡建一個兩層卷積網路,並將訓練結果與之前的兩層隱含層的神經網路結果進行對比。網路結構是兩層卷積+一層全連接。

網路參數如下:

num_channels=1 #圖像通道數,灰度圖,因此為1

batch_size = 16 #每次訓練的批量大小

patch_size = 5 #卷積核大小

depth = 16 #卷積通道數

num_hidden = 64 #全連接層節點數

對應的各層參數為:

layer1_weights = tf.Variable(tf.truncated_normal(

[patch_size, patch_size,num_channels, depth], stddev=0.1))

layer1_biases = tf.Variable(tf.zeros([depth]))

layer2_weights = tf.Variable(tf.truncated_normal(

[patch_size, patch_size, depth, depth], stddev=0.1))

layer2_biases = tf.Variable(tf.constant(1.0, shape=[depth]))

layer3_weights= tf.Variable(tf.truncated_normal(

[image_size // 4 * image_size // 4 * depth,num_hidden], stddev=0.1))

layer3_biases = tf.Variable(tf.constant(1.0, shape=[num_hidden]))

layer4_weights = tf.Variable(tf.truncated_normal(

[num_hidden, num_labels], stddev=0.1))

layer4_biases = tf.Variable(tf.constant(1.0, shape=[num_labels]))

模型計算過程:

defmodel(data):

shape = hidden.get_shape().as_list()

reshape = tf.reshape(hidden, [shape[0], shape[1] * shape[2] * shape[3]])

return tf.matmul(hidden, layer4_weights) + layer4_biases

如果小夥伴們看過《基於Tensorflow搭建神經網路》這篇的話就會發現,計算過程的實現,跟DNN的差別並不大,就是參數換成了卷積核,每層網路的運算,由WX+b變成了卷積運算,激活函數仍然是Relu。看到這裡,大家對CNN應該如何實現應該瞭然了,如何搭建更深層次的卷積網路,大家應該也心中有數了,哈哈,沒錯,我講東西,靠的就是咱們的默契!其實搭建神經網路就像搭積木,一層層的加起來,真是想要多深就能有多深。

兩層網路中卷積運算的stride為2,這意味著輸出的寬高為輸入的一半,因此兩層卷積計算完成後的輸出維度為(image_size // 4 , image_size // 4 , depth),這也就是全連接層的輸入,因此layer3_weight的維度是(image_size // 4 *image_size // 4 * depth, num_hidden)。關於卷積運算的輸入輸出維度關係,可參考《卷積與轉置卷積輸入輸出計算》中總結的公式,強烈建議大家收藏這篇文章,或者,把裡面的英文版寶典下載下來,它一定是一本你會經常查閱的工具書。

下面給出模型定義完整代碼:

將訓練次數設為2W次,得到的結果和2層隱含層DNN訓練結果進行對比:

卷積網路訓練結果

2層隱含層網路訓練結果

從結果我們可以看到,與2層隱含層網路相比,2層卷積網路有非常明顯的提升。

卷積神經網路從AlexNet到現在,經歷了爆髮式的發展,非常多的網路被陸續提出,並有著越來越好的表現,模型也是朝著越來越深的方向發展。不過小夥伴們在選擇模型時,還是建議結合具體任務和實際數據,從較淺較小的模型開始嘗試,選擇合適的模型,不必盲目追求模型深度或者複雜度,畢竟更複雜的網路意味著更多的參數、更複雜的計算、更長的訓練時間和更高的過擬合可能。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 我和AI談戀愛 的精彩文章:

TAG:我和AI談戀愛 |