tensorflow - TensorFlow 和 PyTorch 中的 Conv2D 填充
问题描述
我正在尝试将TensorFlow
模型转换为PyTorch
但遇到问题padding
。我的相关平台代码如下:
TensorFlow
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu,
name = "conv1")
PyTorch
conv1 = nn.Conv2d(1, 32, kernel_size=5, stride=1, padding=2)
我有几个问题:
- 上面的代码是等价的吗?
- 如果我们在中使用填充,
padding
在左/右/上/下添加了多少个 s ?same
tensorflow
- 如果我们使用in ,
padding
在 left/right/top/bottom 上添加了多少个 s ?padding=2
pytorch
- 如果上述两个代码片段不等价,那么我们如何制作相同的
conv
层?
提前致谢。
解决方案
要回答您的问题:
Pytorch 没有 padding = 'same' 的原因很简单,因为它的动态计算图与 Tensorflow 静态图相比。
由于使用了不同的填充,这两个代码并不等效。
'Same' 填充尝试在左右均匀填充,但如果要添加的列数是奇数,则会在右侧添加一个额外的列。
Pytorch 中的 'Padding = 2' 在两侧应用 2 个隐式填充。
Pytorch 1.9 为 un-stride 或 stride = 1 卷积添加了 padding = 'same'。这将适用于您的用例。
但是对于 stride > 2 填充需要手动添加。
这是执行“相同”填充的良好实现:-
https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/layers/padding.py#L28
推荐阅读
- python - 如何在 Python 的 PIL ImageFont 中指定 CJK 脚本的本地化形式?
- javascript - jQuery点击事件父id值
- python - TypeError:“用户”对象在尝试创建特定列表时不可下标
- tensorflow - Tensorflow:理解 tf.contrib.layers.instance_norm 图
- terraform - 仅当 vars.tf 文件中的变量设置为 true 时才创建 main.tf 资源
- homebrew - 在 Ubuntu 20.04.1 中使用 Homebrew 安装 LibIconv
- android - 删除导航栏上方不必要的空白
- c - C中 pow 的精度是否取决于参数的比例?
- python - 为什么 DNN 不学习?
- css - 将十六进制 CSS 变量与 alpha 值组合