张量流 conv2d 在偶数步幅和奇数步幅之间有不同的起始指数



根据我对 tf.nn.conv2d 文档的理解,用于 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)

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

正在发生的事情是,如果额外的零列(来自填充(的数量是奇数,Tensorflow 将在末尾添加列。

在 stride = 1 的示例中,它需要添加两列,因此它在开头和结尾添加一列(表示每条边的开头、结尾:左、右、上、下(。步幅 = 2 也会做同样的事情。

但是,对于 stride = 3,它只需要添加一列,然后在末尾(右侧和底部(完成。如果需要添加 5 列,它将在开头(左、上(添加 2 列,在末尾(右、下(添加 3 列

最新更新