【问题标题】:tensorflow conv2d diffrent start index between even and odd stridetensorflow conv2d偶数和奇数步幅之间的不同起始索引
【发布时间】:2017-12-04 19:32:27
【问题描述】:

据我所知,tf.nn.conv2d doc 对于 SAME 卷积(无论步幅如何)第一个点积应该以 (0,0) 为中心 虽然正如您在下面看到的,当步幅奇数时,第一个点积似乎以 (1,1) 为中心: 在这个玩具示例中

输入形状为 [5,5,1]

滤波器形状为 [3,3,1,1]

res = tf.nn.conv2d(X, F, strides=[1,x,x,1], padding='SAME')

第 1 步结果:

array([[ 1.49573362,  2.65084887,  2.96818447,  3.04787111,  1.89275599],
   [ 3.1941781 ,  4.47312069,  4.10260868,  4.13415051,  2.85520792],
   [ 2.65490007,  3.41439581,  2.93415952,  3.65811515,  2.89861989],
   [ 2.22547054,  2.98453856,  2.89428496,  3.29111433,  2.53204632],
   [ 0.52702606,  1.16226625,  1.75986075,  2.20483446,  1.56959426]], dtype=float32)

步幅 2 结果:

array([[ 1.49573362,  2.96818447,  1.89275599],
   [ 2.65490007,  2.93415952,  2.89861989],
   [ 0.52702606,  1.75986075,  1.56959426]], dtype=float32)

步幅 3 结果:

array([[ 4.47312069,  2.85520792],
   [ 1.16226625,  1.56959426]], dtype=float32)

这是一个错误还是我遗漏了什么?

【问题讨论】:

  • 您是否尝试过使用您可以实际计算的值制作一个玩具示例? '正如你在下面看到的......'我不了解你,但我什么都看不到:很多随机数。
  • 是的,我做了,但您所要做的就是将输出与 stride 与 stride 1 的输出进行比较。因为 stride 的结果是 stride 1 结果的子采样版本。例如,您可以看到步幅为 3 的 (0,0) 结果是步幅为 1 的 (1,1) 结果。

标签: python machine-learning tensorflow deep-learning convolution


【解决方案1】:

如果额外的零列(来自填充)的数量是奇数,则 tensorflow 将在末尾添加列。

在 stride = 1 的示例中,它需要添加两列,因此它在开头添加一列,在末尾添加一列(意思是开始,每边的结尾:左、右、上、下)。 Stride = 2 也一样。

但是,对于 stride = 3,它只需要添加一列并在末尾(右侧和底部)执行此操作。如果需要添加 5 列,它将在开头(左、上)添加 2,在结尾(右、下)添加 3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多