Tensorflow中2D卷积API使用
TF中用于2D卷積操作的api是tf.nn.conv_2d,源碼位置位于tensorflow/python/ops/gen_nn_ops.py
接口定義為:
conv2d(input, filter, strides,padding, use_cudnn_on_gpu=True, data_format=‘NHWC’,name='None')
其中
input的shape是[batch, in_height, in_width, in_channels]
filter的shape是[filter_height, filter_width, in_channels, out_channels]
strides在的通常要寫成[1, stride, stride, 1],也就是說第0個參數和第三個參數都是固定1,中間分別是x方向和y方向的步長,通常是一樣的。
padding是一個字符串類型,有SAME和VALID兩個取值。
返回的同樣是一個tensor。
再說一下tf.nn.bias.add這個api
接口定義是:
bias_add(value, bias, data_format=None, name = None)
value是一個tensor,可以是float的,double,int32等等類型的,value可以是任意維度的tensor,但是value的最后一維的size要和bias相同,類型可以不一樣,可以轉化就可以例如int轉double等。
例如在下面的代碼中經過卷積操作之后,輸入是28*28*1的單通道圖像,輸出編程了24*24*32的特征圖,偏置也是32維的tensor,特征圖i對應+bias[i],輸出還是24*24*32。同一個特征圖共享了卷積核的5*5個參數和1個bias參數,也就是說這里一共有(5*5+1)*32個參數。
#從mnist數據集中讀數據,定義一個占位符先 x = tf.placeholder(tf.float32, [None, 28*28]) #將x reshape成一個4D的tensor, 分別是batch size, height, width,channel x = x.reshape(x, shape=[-1, 28,28,1]) #這個變量是卷積核,卷積核大小是5*5,通道數1,卷積核格式32個 weight = tf.Variable(tf.random_normal([5,5,1,32])) bias = tf.Variable(tf.random_normal([32])) stride = 1 x = tf.nn.conv2d(x, weight, strides = [1, stride, stride, 1], padding= 'SAME') #再加上偏置量 x = tf.nn.bias_add(x, bias)通過上面的代碼應該就可以很清楚的明白tensorflow中是如何做2維卷積的了。
另外一個用于實現2D卷積的API是tf.layers.conv2d,實際上和上面的這個API并沒有太大區別,只是參數更多一些,使用的時候二者都可以。
后續再說一說CNN中的轉置卷積(deconvolutional network)在tf中的api的使用,以及計算方式。
?
轉載于:https://www.cnblogs.com/hellozlh/p/8251850.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Tensorflow中2D卷积API使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断溢出的三种方式
- 下一篇: DOS中判断进程是否存在的方法