TensorFlow 中卷积的自定义填充
Custom padding for convolutions in TensorFlow
在tensorflow函数tf.nn.conv2d中,padding选项只有'SAME'和'VALID'。
但是在 Caffe 的 conv 层中,pad option 可以定义要(隐式)添加到输入每一侧的像素数。
如何在 Tensorflow 中实现?
非常感谢。
您可以在应用 tf.nn.conv2d(..., padding="VALID")
之前使用 tf.pad()
(参见 doc)填充 Tensor(有效填充意味着没有填充)。
例如,如果您想用 2 个像素的高度和 1 个像素的宽度填充图像,然后应用具有 5x5 内核的卷积:
input = tf.placeholder(tf.float32, [None, 28, 28, 3])
padded_input = tf.pad(input, [[0, 0], [2, 2], [1, 1], [0, 0]], "CONSTANT")
filter = tf.placeholder(tf.float32, [5, 5, 3, 16])
output = tf.nn.conv2d(padded_input, filter, strides=[1, 1, 1, 1], padding="VALID")
output
将具有 [None, 28, 26, 16]
的形状,因为您只有宽度为 1 的填充。
在tensorflow函数tf.nn.conv2d中,padding选项只有'SAME'和'VALID'。
但是在 Caffe 的 conv 层中,pad option 可以定义要(隐式)添加到输入每一侧的像素数。
如何在 Tensorflow 中实现?
非常感谢。
您可以在应用 tf.nn.conv2d(..., padding="VALID")
之前使用 tf.pad()
(参见 doc)填充 Tensor(有效填充意味着没有填充)。
例如,如果您想用 2 个像素的高度和 1 个像素的宽度填充图像,然后应用具有 5x5 内核的卷积:
input = tf.placeholder(tf.float32, [None, 28, 28, 3])
padded_input = tf.pad(input, [[0, 0], [2, 2], [1, 1], [0, 0]], "CONSTANT")
filter = tf.placeholder(tf.float32, [5, 5, 3, 16])
output = tf.nn.conv2d(padded_input, filter, strides=[1, 1, 1, 1], padding="VALID")
output
将具有 [None, 28, 26, 16]
的形状,因为您只有宽度为 1 的填充。