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


Python tf.nn.conv2d用法及代码示例


在给定 input 和 4-D filters 张量的情况下计算二维卷积。

用法

tf.nn.conv2d(
    input, filters, strides, padding, data_format='NHWC', dilations=None,
    name=None
)

参数

  • input 一个Tensor。必须是以下类型之一:half , bfloat16 , float32 , float64。秩至少为 4 的张量。维度顺序根据 data_format 的值进行解释;将 all-but-inner-3 尺寸用作批次尺寸。详情见下文。
  • filters 一个Tensor。必须与 input 具有相同的类型。形状为 [filter_height, filter_width, in_channels, out_channels] 的 4-D 张量
  • strides 长度为 1 , 24ints 的 int 或列表。 input 的每个维度的滑动窗口的步幅。如果给定单个值,则会在 HW 维度中复制它。默认情况下,NC 维度设置为 1。维度顺序由 data_format 的值确定,详情请参见下文。
  • padding 无论是string "SAME"或者"VALID"指示要使用的填充算法的类型,或指示每个维度开始和结束处的显式填充的列表。看这里了解更多信息。当使用显式填充并且data_format 是"NHWC", 这应该是形式[[0, 0], [pad_top, pad_bottom], [pad_left, pad_right], [0, 0]].当使用显式填充并且 data_format 是"NCHW", 这应该是形式[[0, 0], [0, 0], [pad_top, pad_bottom], [pad_left, pad_right]].
  • data_format 一个可选的 string 来自: "NHWC", "NCHW" 。默认为 "NHWC" 。指定输入和输出数据的数据格式。使用默认格式"NHWC",数据按以下顺序存储:batch_shape + [height, width, channels]。或者,格式可以是"NCHW",数据存储顺序为:batch_shape + [channels, height, width]
  • dilations 长度为 1 , 24ints 的 int 或列表,默认为 1。input 的每个维度的膨胀因子。如果给定单个值,则会在 HW 维度中复制它。默认情况下,NC 维度设置为 1。如果设置为 k > 1,则该维度上的每个过滤器元素之间将有 k-1 个跳过的单元格。维度顺序由 data_format 的值决定,详见上文。如果 4-d 张量必须为 1,则批量和深度维度的膨胀。
  • name 操作的名称(可选)。

返回

  • 一个Tensor。具有与input 相同的类型和相同的外部批次形状。

input 张量的秩可能为 4 或更高,其中形状尺寸 [:-3] 被认为是批量尺寸( batch_shape )。

给定一个形状的输入张量batch_shape + [in_height, in_width, in_channels]和形状的过滤器/内核张量[filter_height, filter_width, in_channels, out_channels],此操作执行以下操作:

  1. 将过滤器展平为具有形状的二维矩阵[filter_height * filter_width * in_channels, output_channels].
  2. 从输入张量中提取图像块以形成形状的虚拟张量[batch, out_height, out_width, filter_height * filter_width * in_channels].
  3. 对于每个补丁,right-multiplies 过滤器矩阵和图像补丁向量。

详细地说,使用默认的 NHWC 格式,

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]

必须有 strides[0] = strides[3] = 1 。对于相同水平和垂直步幅的最常见情况,strides = [1, stride, stride, 1]

使用示例:

x_in = np.array([[
  [[2], [1], [2], [0], [1]],
  [[1], [3], [2], [2], [3]],
  [[1], [1], [3], [3], [0]],
  [[2], [2], [0], [1], [1]],
  [[0], [0], [3], [1], [2]], ]])
kernel_in = np.array([
 [ [[2, 0.1]], [[3, 0.2]] ],
 [ [[0, 0.3]],[[1, 0.4]] ], ])
x = tf.constant(x_in, dtype=tf.float32)
kernel = tf.constant(kernel_in, dtype=tf.float32)
tf.nn.conv2d(x, kernel, strides=[1, 1, 1, 1], padding='VALID')
<tf.Tensor:shape=(1, 4, 4, 2), dtype=float32, numpy=..., dtype=float32)>

相关用法


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