当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python tf.compat.v1.nn.convolution用法及代码示例


计算N-D 卷积的总和(实际上是cross-correlation)。

用法

tf.compat.v1.nn.convolution(
    input, filter, padding, strides=None, dilation_rate=None, name=None,
    data_format=None, filters=None, dilations=None
)

参数

  • input 一个 (N+2)-D Tensor 类型为 T ,形状 [batch_size] + input_spatial_shape + [in_channels] 如果 data_format 不以 "NC" 开头(默认),或者 [batch_size, in_channels] + input_spatial_shape 如果 data_format 以 "NC" 开头.
  • filter (N+2)-D Tensorinput 具有相同类型和形状 spatial_filter_shape + [in_channels, out_channels]
  • padding 一个字符串,或者"VALID"或者"SAME".填充算法。"valid"表示没有填充。"same"导致在输入的左/右或上/下均匀填充,以便在步幅为 1 时输出具有与输入相同的高度/宽度尺寸。请参阅这里了解更多信息。
  • strides 可选的。 N 个整数的序列 >= 1。指定输出步幅。默认为 [1]*N。如果任何 strides 值 > 1,则 dilation_rate 的所有值都必须为 1。
  • dilation_rate 可选的。 N 个整数的序列 >= 1。指定滤波器上采样/输入下采样率。在文献中,有时将相同的参数称为 input stridedilation 。用于卷积的有效滤波器大小将为 spatial_filter_shape + (spatial_filter_shape - 1) * (rate - 1) ,通过在每个空间维度 i 中原始滤波器的连续元素之间插入 (dilation_rate[i]-1) 零来获得。如果 dilation_rate 的任何值 > 1,则所有步幅值都必须为 1。
  • name 返回张量的可选名称。
  • data_format 一个字符串或无。指定input 和输出的通道维度是最后一个维度(默认,或者如果data_format 不以"NC" 开头),还是第二个维度(如果data_format 以"NC" 开头)。对于 N=1,有效值为 "NWC"(默认)和 "NCW"。对于 N=2,有效值为 "NHWC"(默认)和 "NCHW"。对于 N=3,有效值为 "NDHWC"(默认)和 "NCDHW"。

返回

  • A 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 的值。

    如果填充 == "SAME":output_spatial_shape[i] = ceil(input_spatial_shape[i] /strides[i])

    如果填充 == "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 无效。

这也支持通过可选的strides 参数输出跨步或通过可选的dilation_rate 参数支持atrous 卷积(也称为带孔的卷积或扩张卷积,基于法语单词"trous" 表示英语中的孔)。然而,目前,atrous 卷积不支持输出跨步。

具体来说,在data_format不以"NC"开头的情况下,给定一个秩为(N+2)的input形状的张量

[num_batches, input_spatial_shape[0], ..., input_spatial_shape[N-1], num_input_channels],

a rank (N+2) filter 形状张量

[spatial_filter_shape[0], ..., spatial_filter_shape[N-1], num_input_channels, num_output_channels],

一个可选的 dilation_rate 形状 N 的张量(默认为 [1]N),指定滤波器上采样/输入下采样率,以及一个可选的 N 步长列表(默认为 [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 )简单地转置如下:

卷积(输入,data_format,**kwargs)= tf.transpose(卷积(tf.transpose(输入,[0] + range(2,N+2)+ [1]),**kwargs),[0 , N+1] + 范围(1, N+1))

要求 1 <= N <= 3。

相关用法


注:本文由纯净天空筛选整理自tensorflow.org大神的英文原创作品 tf.compat.v1.nn.convolution。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。