tf.nn.conv2d()方法
tf.nn.conv2d是用來實現卷積的方法
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)
除去name參數用以指定該操作的name,與方法有關的一共五個參數:
第一個參數input:指需要做卷積的輸入圖像,它要求是一個Tensor,具有[batch, in_height, in_width, in_channels]這樣的shape,具體含義是[訓練時一個batch的圖片數量, 圖片高度, 圖片寬度, 圖像通道數],注意這是一個4維的Tensor,要求類型為float32和float64其中之一
第二個參數filter:相當于CNN中的卷積核,它要求是一個Tensor,具有[filter_height, filter_width, in_channels, out_channels]這樣的shape,具體含義是[卷積核的高度,卷積核的寬度,圖像通道數,卷積核個數],要求類型與參數input相同,有一個地方需要注意,第三維in_channels,要和參數input的第四維相等
第三個參數strides:卷積時在圖像每一維的步長,這是一個一維的向量,長度4。strides[0]和strides[3]必須為1,strides[1],strides[2]決定卷積核在輸入圖像in_hight,in_width方向的滑動步長
第四個參數padding:string類型的量,只能是”SAME”,”VALID”其中之一,這個值決定了不同的卷積方式(后面會介紹)
第五個參數:use_cudnn_on_gpu:bool類型,是否使用cudnn加速,默認為true
input和filter參數里的值都很好理解,關鍵是滑動步長和padding不同的值會決定最后得到的輸出是多大尺寸。
?
?
strides和padding的詳解
直接給出總結:
??卷積核大小,滑動步長直接影響最后的卷積結果的大小。當padding為SAME模式時,先對原圖像進行填充,再做卷積,填充值須根據卷積核大小及滑動步長決定。
- 當滑動步長大于1時:填充數 = K-L%S(K:卷積核邊長,L:輸入圖像邊長,S:滑動步長)
- 當滑動步長等于1時:填充數 = 卷積核邊長減1
- 另外當差偶數個元素時首尾各補一半,差奇數個時前邊補奇數個,后邊補偶數個。
當padding為VALID模式時,很簡單粗暴直接從原始圖像的首段開始卷積,到最后不能匹配卷積核的部分直接舍去,
參考
https://blog.csdn.net/qq_17272679/article/details/79591540
總結
以上是生活随笔為你收集整理的tf.nn.conv2d()方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow中张量、常量、变量、
- 下一篇: tensorflow常见函数——clip