我使用Tensorflow 2.0已经快一年了,当我在卷积中使用填充“相同”时,我在很多代码中发现了一个概念。
我见过的一些代码实现了以下功能:
x = ZeroPadding2D(padding=(pad, pad))(x)
x = Conv2D(64, (3, 3), strides=(1, 1), dilation_rate=pad,
use_bias=False)(x)不是直接使用:
x = Conv2D(64, (3, 3), strides=(1, 1), dilation_rate=pad,
use_bias=False, padding='same')(x)在卷积之前用same=‘valid’进行填充,和直接在卷积中使用padding='same‘有什么不同吗?
我猜这两种方法没有区别,那么为什么人们会使用这种方法呢?
发布于 2021-05-22 01:19:19
绝对没有区别。
这就是证据
import tensorflow as tf
from tensorflow.keras.layers import Conv2D, ZeroPadding2D
inputs = tf.ones((1, 5, 5, 1))
kernel_initializer = tf.keras.initializers.Constant(2)
pad = 1
x = ZeroPadding2D(padding=(pad, pad))(inputs)
x = Conv2D(
64,
(3, 3),
strides=(1, 1),
dilation_rate=pad,
use_bias=False,
kernel_initializer=kernel_initializer,
)(x)
y = Conv2D(
64,
(3, 3),
strides=(1, 1),
dilation_rate=pad,
use_bias=False,
padding="same",
kernel_initializer=kernel_initializer,
)(inputs)
tf.assert_equal(x, y)人们做第一个,可能是因为他们想记住公式(?)或者因为这是他们的风格选择-但这在实践中没有什么不同
https://stackoverflow.com/questions/67633655
复制相似问题