1. 程式人生 > >tf.nn的conv2d卷積與max_pool池化

tf.nn的conv2d卷積與max_pool池化

() 矩陣 ray 產生 des bsp 卷積 sam sans

tf.nn.conv2d(value,filter,strides,[...])

對於圖片來說

value : 形狀通常是np.array()類型的4維數組也稱tensor(張量), (batch,height,width,channels) 可以理解為(圖片樣本的個數,高,寬,圖片的顏色通道數)

value是待卷積的數據

filter: 卷積核 -4元素元組【height,width,in_channels,out_channels】,前面的3個參數和value的後面3個參數一一對應。但是out_channels不太確定,卷積核的個數,

    如果對一個shape 為[64,40,120,32]的數據進行卷積 filter=【3,3,32,64】,padding=‘same‘,strides=[1, 1, 1, 1] ,shape就變為了[64,40,120,64].

    [3,3,32]與[40,120,32]進行對應,32=32,則相當於 【3,3】對【40,120】,卷積時以【3*3】的掃描面積在【40,120】上進行掃描,每掃描一次,在結果集上產生一個【1,1】的數據單位

起始位置為【40,120】上面的最前面【3,3】的部分,

移動步調大小為【1,1,1,1】,即上下左右每次移動都只能移動1個單位,每次只能向一個方向移動,

same表示結束位置為 卷積核與源數據重疊,只需移動一個單位則不再重疊。

    所以,對於【40,120,32】經過【3,3,32】的掃描後變成【40,120,1】,64表示經過了64次這樣的掃描,於成了【40,120,64】


#SAME模式就是將滑動窗口與矩陣進行左對齊,然後向右滑動。一直滑到與矩陣最右邊那一列不相交為止。

#tf.nn.conv2d(value,filter,strides) value是待卷積的數據,filter是卷積核【height,width,in_channels,out_channels】,out_channels即映射通過的卷積核的個數,w_c1則表示會通過32次【3,3,1】的卷積核
#SAME模式就是將滑動窗口與矩陣進行左對齊,然後向右滑動。一直滑到與矩陣最右邊那一列不相交為止。
conv1 = tf.nn.relu(tf.nn.bias_add(tf.nn.conv2d(x, w_c1, strides=[1, 1, 1, 1], padding=‘SAME‘), b_c1))#【64,40,120,32】 【60,160,32】


#tf.nn.max_pool(value,ksize,strides)池化與卷積的過程原理基本一樣,ksize池化窗【batch,height,width,channels】,
#只是卷積改變的是height,width,channels,池化通常改變的是height,width
conv1 = tf.nn.max_pool(conv1, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding=‘SAME‘) #[64,20,60,32] 【
#tf.nn.dropout()用於在訓練時,以某種概率暫不啟用一部分神經元
conv1 = tf.nn.dropout(conv1, keep_prob)

tf.nn的conv2d卷積與max_pool池化