TensorFlow-tf.nn.conv2d 函数

时间:2022-04-16 13:49:03

今天在建立卷积模型时遇到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]