tensorflow 2.0 卷积层中的自定义填充
custom padding in convolution layer of tensorflow 2.0
在 Pytorch 中,nn.conv2d() 的填充参数允许用户输入选择的填充大小(如 p=n)。 TensorFlow 没有这样的等价物。我们如何才能实现类似的定制?如果设计一个小型网络,使用常用的 CNN 层(如池和 FC)来演示如何从输入层开始,将不胜感激。
您可以使用 tf.pad
,然后使用无(“有效”)填充的卷积。这是一个简单的例子:
inp = tf.keras.Input((32, 32, 3)) # e.g. CIFAR10 images
custom_padded = tf.pad(inp, ((0, 0), (2, 0), (2, 0), (0, 0)))
conv = tf.keras.layers.Conv2D(16, 3)(custom_padded) # default padding is "valid"
model = tf.keras.Model(inp, conv)
填充的语法可能需要一些时间来适应,但基本上每个二元组代表一个维度(批次、宽度、高度、过滤器),在每个二元组中,第一个数字是要填充多少个元素在前面垫,第二个在后面垫多少。所以在这种情况下:
- 批处理轴中没有填充
- 宽度轴左边2个元素,右边0个元素
- 顶部 2 个元素,高度轴底部 0 个元素
- 通道轴无填充
在此示例中,我们使用了 16 个过滤器,过滤器大小为 3。通常这需要在每一侧填充 1 个元素以实现“相同”填充,但在这里我们决定在一侧填充 2 个元素一侧,另一侧为 0。这当然可以适用于您 want/need.
的任何其他方案
这默认使用 0 填充,但您可以在 pad
函数中更改它。请参阅文档:https://www.tensorflow.org/api_docs/python/tf/pad
请注意,我省略了池化层或其他层,因为这应该很容易添加。基本配方只是用 pad
加上没有填充的卷积替换卷积层。
在 Pytorch 中,nn.conv2d() 的填充参数允许用户输入选择的填充大小(如 p=n)。 TensorFlow 没有这样的等价物。我们如何才能实现类似的定制?如果设计一个小型网络,使用常用的 CNN 层(如池和 FC)来演示如何从输入层开始,将不胜感激。
您可以使用 tf.pad
,然后使用无(“有效”)填充的卷积。这是一个简单的例子:
inp = tf.keras.Input((32, 32, 3)) # e.g. CIFAR10 images
custom_padded = tf.pad(inp, ((0, 0), (2, 0), (2, 0), (0, 0)))
conv = tf.keras.layers.Conv2D(16, 3)(custom_padded) # default padding is "valid"
model = tf.keras.Model(inp, conv)
填充的语法可能需要一些时间来适应,但基本上每个二元组代表一个维度(批次、宽度、高度、过滤器),在每个二元组中,第一个数字是要填充多少个元素在前面垫,第二个在后面垫多少。所以在这种情况下:
- 批处理轴中没有填充
- 宽度轴左边2个元素,右边0个元素
- 顶部 2 个元素,高度轴底部 0 个元素
- 通道轴无填充
在此示例中,我们使用了 16 个过滤器,过滤器大小为 3。通常这需要在每一侧填充 1 个元素以实现“相同”填充,但在这里我们决定在一侧填充 2 个元素一侧,另一侧为 0。这当然可以适用于您 want/need.
的任何其他方案这默认使用 0 填充,但您可以在 pad
函数中更改它。请参阅文档:https://www.tensorflow.org/api_docs/python/tf/pad
请注意,我省略了池化层或其他层,因为这应该很容易添加。基本配方只是用 pad
加上没有填充的卷积替换卷积层。