在tf1.0中,對卷積層重新進行了封裝,比原來版本的卷積層有了很大的簡化。
一、舊版本(1.0以下)的卷積函數:tf.nn.conv2d
conv2d( input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None )
該函數定義在tensorflow/python/ops/gen_nn_ops.py。
參數:
input:一個4維Tensor(N,H,W,C). 類型必須是以下幾種類型之一:half,float32,float64.filter:卷積核. 類型和input必須相同,4維tensor,[filter_height, filter_width, in_channels, out_channels],如[5,5,3,32]strides: 在input上切片采樣時,每個方向上的滑窗步長,必須和format指定的維度同階,如[1, 2, 2, 1]padding: 指定邊緣填充類型:"SAME", "VALID". SAME表示卷積后圖片保持不變,VALID則會縮小。use_cudnn_on_gpu: 可選項,bool型。表示是否在GPU上用cudnn進行加速,默認為True.data_format: 可選項,指定輸入數據的格式:"NHWC"或 "NCHW", 默認為"NHWC"。
NHWC格式指[batch, in_height, in_width, in_channels]
NCHW格式指[batch, in_channels, in_height, in_width]name: 操作名,可選.
示例:
conv1=tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
二、1.0版本中的卷積函數:tf.layers.conv2d
conv2d( inputs, filters, kernel_size, strides=(1, 1), padding='valid', data_format='channels_last', dilation_rate=(1, 1), activation=None, use_bias=True, kernel_initializer=None, bias_initializer=tf.zeros_initializer(), kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, trainable=True, name=None, reuse=None )
定義在tensorflow/python/layers/convolutional.py.
參數多了很多,但實際用起來,卻更簡單。
inputs: 輸入數據,4維tensor.filters: 卷積核個數。kernel_size:卷積核大小,如【5,5】。如果長寬相等,也可以直接設置為一個數,如kernel_size=5strides: 卷積過程中的滑動步長,默認為[1,1]. 也可以直接設置為一個數,如strides=2padding: 邊緣填充,'same' 和'valid‘選其一。默認為valid-
data_format: 輸入數據格式,默認為channels_last,即(batch, height, width, channels),也可以設置為channels_first對應(batch, channels, height, width). -
dilation_rate: 微步長卷積,這個比較復雜一些,請百度. activation: 激活函數.use_bias: Boolean型,是否使用偏置項.kernel_initializer: 卷積核的初始化器.bias_initializer: 偏置項的初始化器,默認初始化為0.kernel_regularizer: 卷積核化的正則化,可選.bias_regularizer: 偏置項的正則化,可選.activity_regularizer: 輸出的正則化函數.trainable: Boolean型,表明該層的參數是否參與訓練。如果為真則變量加入到圖集合中GraphKeys.TRAINABLE_VARIABLES(seetf.Variable).name: 層的名字.reuse: Boolean型, 是否重復使用參數.
示例:
conv1=tf.layers.conv2d( inputs=x, filters=32, kernel_size=5, padding="same", activation=tf.nn.relu,
kernel_initializer=tf.TruncatedNormal(stddev=0.01))
更復雜一點的:
conv1 = tf.layers.conv2d(batch_images, filters=64, kernel_size=7, strides=2, activation=tf.nn.relu, kernel_initializer=tf.TruncatedNormal(stddev=0.01) bias_initializer=tf.Constant(0.1), kernel_regularizer=tf.contrib.layers.l2_regularizer(0.003), bias_regularizer=tf.contrib.layers.l2_regularizer(0.003), name='conv1')
