TensorFlow函数教程:tf.nn.convolution
tf.nn.convolution函数
tf.nn.convolution(
input,
filter,
padding,
strides=None,
dilation_rate=None,
name=None,
data_format=None
)
定义在:tensorflow/python/ops/nn_ops.py.
请参阅指南:神经网络>卷积运算
计算ND卷积的总和(实际上是互相关).
这也支持通过可选的strides参数进行输出跨步或者通过可选的dilation_rate参数(也称为带孔的卷积或扩张卷积).然而,目前不支持对异常卷积的输出跨步.
具体地说,在data_format不以“NC”开头的情况下,给出秩为(N + 2)的input张量,其形状如下:
[num_batches, input_spatial_shape[0], ..., input_spatial_shape[N-1], num_input_channels]
秩为(N + 2)的filter张量,其形状为:
[spatial_filter_shape[0], ..., spatial_filter_shape[N-1], num_input_channels, num_output_channels]
一个可选的dilation_rate张量,其形状为[N](默认为[1] N),指定滤波器上采样/输入下采样率,以及一个N strides的可选列表(默认[1] N),这计算每个N-D空间输出位置(x[0], ..., x[N-1]):
output[b, x[0], ..., x[N-1], k] =
sum_{z[0], ..., z[N-1], q}
filter[z[0], ..., z[N-1], q, k] *
padded_input[b,
x[0]*strides[0] + dilation_rate[0]*z[0],
...,
x[N-1]*strides[N-1] + dilation_rate[N-1]*z[N-1],
q]
其中b是批次的索引,k是输出通道编号,q是输入通道编号,z是过滤器内的N-D空间偏移.这里,padded_input通过使用一个形状为(spatial_filter_shape-1) * dilation_rate + 1的有效的空间过滤器,和输出跨步strides来对输入进行零填充获得的.
在这种情况下,data_format不以"NC"开头,在input与输出(但不是filter)被简单地调换,如下所示:
convolution(input, data_format, kwargs) = tf.transpose(convolution(tf.transpose(input, [0] + range(2,N+2) + [1]), kwargs), [0, N+1] + range(1, N+1))
这要求:1 <= N <= 3.
参数:
- input:一个类型为T的ND Tensor,其中,如果data_format不以“NC”(默认值)开头,则形状为[batch_size] + input_spatial_shape + [in_channels];或者data_format以“NC”开头,则形状为[batch_size, in_channels] + input_spatial_shape.
- filter:与input具有相同类型的N-D Tensor,它的形状为spatial_filter_shape + [in_channels, out_channels].
- padding:一个字符串,可以是"VALID"或者"SAME";填充算法.
- strides: 可选的.N int的顺序> = 1.指定输出步幅.默认为[1] * N. 如果步幅的任何值> 1,则dilation_rate的所有值必须为1.
- dilation_rate: 可选,N ints> = 1的序列,指定滤波器上采样/输入下采样率.在文献中,相同的参数有时称为input stride或dilation;用于卷积的有效滤波器大小将是spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1),通过在每个空间维度 i 中在原始滤波器的连续元素之间插入(dilation_rate [i] -1)零来获得.如果dilation_rate的任何值> 1,则步幅的所有值必须为1.
- name:返回张量的可选名称.
- data_format:字符串或None,指定input和输出的通道维度是否是最后一个维度(默认,或者data_format不是以“NC”开头),还是第二个维度(如果data_format以“NC”开头)
对于N = 1,有效值是“NWC”(默认)和“NCW”;
对于N = 2,有效值是“NHWC”(默认)和“NCHW”;
对于N = 3,有效值为“NDHWC”(默认)和“NCDHW”.
返回:
一个Tensor,与形状如下的input具有相同的类型:
`[batch_size] + output_spatial_shape + [out_channels]`
如果data_format为None或者不以“NC”开头,或者:
`[batch_size, out_channels] + output_spatial_shape`
如果data_format以“NC”开头,则output_spatial_shape取决于值padding,padding值如下:
如果padding ==“SAME”:output_spatial_shape [i] = ceil(input_spatial_shape [i] / strides [i])
如果padding ==“VALID”:output_spatial_shape [i] = ceil((input_spatial_shape [i] - (spatial_filter_shape [i] -1)* dilation_rate [i])/ strides [i]).
可能引发的异常:
- ValueError:如果输入/输出深度与filter形状不匹配,填充不是"VALID"或者"SAME",或者data_format无效.