今天在建立卷积模型时遇到tf.nn.conv2d函数。
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None,name=None)
此函数的作用是在给定四维输入(input)和权重W(filter)的情况下计算二维卷积。
参数解释:
input:
一个Tensor,每个元素的格式必须为float32或float64.
input的形状:[batch,in_height,in_width,in_channels],
batch为训练过程中每迭代一次迭代的照片数。
in_height,in_width分别为图片的高和宽
in_channels为图片的道。
filter:
一个Tensor,每个元素的类型和input类型一致。
filter的形状:[filter_height,filter_width,in_channels,out_channels]
分别为权重的height,width,输入的channels和输出的channels
stride:
长度为4的list,元素类型为int。表示每一维度滑动的步长。
需要注意的是,strides[0]=strides[3]=1.
padding:
可选参数为"Same","VALID"
边距,一般设为0,即padding='SAME'
use_cudnn_on_gpu:
bool类型,有True和False两种选择。
name:
此操作的名字
函数执行以下操作:
1.将参数filter变为一个二维矩阵,形状为:[filter_height*filter_width*in_channels,output_channels]
2.将输入(input)转化为一个具有如下形状的Tensor,形状为:[batch,out_height,out_width,filter_height * filter_width * in_channels]
3.将filter矩阵和步骤2得到的矩阵相乘。
函数的返回值:
元素类型和input相同。
output[b, i, j, k] =sum_{di, dj, q} input[b, strides[1] * i + di, strides[2] * j + dj, q] * filter[di, dj, q, k]