python - padding='same' 转换为 PyTorch padding=#
问题描述
我正在尝试将以下 Keras 模型代码转换为 pytorch,但在处理 padding='same' 时遇到问题。
model = Sequential()
model.add(Conv2D(64, (3, 3), input_shape=img_size))
model.add(BatchNormalization(axis=1))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Conv2D(64, (3, 3), padding='same'))
model.add(BatchNormalization(axis=1))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding='same'))
这会产生以下摘要:
Layer (type) Output Shape Param #
=================================================================
conv2d_1 (Conv2D) (None, 30, 30, 64) 1792
_________________________________________________________________
batch_normalization_1 (Batch (None, 30, 30, 64) 120
_________________________________________________________________
activation_1 (Activation) (None, 30, 30, 64) 0
_________________________________________________________________
dropout_1 (Dropout) (None, 30, 30, 64) 0
_________________________________________________________________
conv2d_2 (Conv2D) (None, 30, 30, 64) 36928
_________________________________________________________________
batch_normalization_2 (Batch (None, 30, 30, 64) 120
_________________________________________________________________
activation_2 (Activation) (None, 30, 30, 64) 0
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 15, 15, 64) 0
=================================================================
Total params: 38,960
Trainable params: 38,840
Non-trainable params: 120
现在,我会写:
self.features = nn.Sequential(
nn.Conv2d(3, 64, kernel_size=3,
bias=False),
nn.BatchNorm2d(64),
nn.ReLU(inplace=True),
nn.Dropout(0.3),
nn.Conv2d(64, 64, kernel_size=3, padding = ?
bias=False),
nn.BatchNorm2d(64),
nn.ReLU(inplace=True),
nn.MaxPool2d(kernel_size=3, stride=2, padding = ?),
)
填充应该有数值。我想知道是否有更简单的方法来计算这个,因为我们使用的是 padding='same'。
此外,Keras 模型的下一行如下所示:
model.add(Conv2D(128, (3, 3), padding='same'))
所以我真的需要重新学习如何计算填充,尤其是在 stride 之后。仅从粗略的角度来看,填充是 2 吗?
解决方案
W:输入体积大小
F:内核大小
S:步幅
P:填充量
输出体积大小 = (W-F+2P)/S+1
例如
输入:7x7,内核:3x3,步幅:1,填充:0
输出大小 = (7-3+2*0)/1+1 = 5 =>5x5
推荐阅读
- javascript - Twitter引导模式在底部滚动条时侦听
- arrays - 将循环中的答案添加到列表中
- php - 带有连接的 PostgreSQL 查询仅通过 AJAX 给出“内部服务器错误”(不在 pgAdmin 上)
- reactjs - ReactJS/Axios:未处理的拒绝(错误):请求失败,状态码为 500
- c - 在使用对齐违规进行强制转换后,指针算术是否仍然定义良好?
- javascript - 使用单个 javascript 文件作为带有导出的模块或作为独立脚本
- git - 我的同事使用 git 存储库共享了一个 zip 文件,但我在 GitHub 中看不到提取的文件。我应该使用什么命令?
- python - 在小部件 PyQt5 上设置布局后更改布局
- angular - 如何将来自后端的数据水平放置在引导水平卡中
- c# - C# 关键字“this”在当前上下文中不可用