首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >填充=“相同”转换为PyTorch padding=#

填充=“相同”转换为PyTorch padding=#
EN

Stack Overflow用户
提问于 2020-06-03 06:41:16
回答 6查看 9.9K关注 0票数 6

我正在尝试将下面的Keras模型代码转换为py手电筒,但在处理padding=“am”时遇到了问题。

代码语言:javascript
复制
    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'))

它产生了以下摘要:

代码语言:javascript
复制
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

现在,我会写:

代码语言:javascript
复制
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 = ?),
        )

填充物应该有数值。我想知道是否有更简单的方法来计算这一点,因为我们使用的是填充=“相同”。

另外,Keras模型的下一行如下所示:

代码语言:javascript
复制
model.add(Conv2D(128, (3, 3), padding='same'))

因此,我真的需要仔细研究如何计算填充,特别是在跨步之后。从粗糙的眼睛,是填充2?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2020-06-03 07:12:53

W:输入体积大小

F:内核大小

S:stride

P:填充物量

输出体积尺寸=(W+2P)/S+1

例如:

输入:7x7,内核:3x3,行程:1,pad:0

输出大小= (7-3+2*0)/1+1 =5 =>5x5

票数 6
EN

Stack Overflow用户

发布于 2020-06-03 08:37:21

代码语言:javascript
复制
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 = 1
                      bias=False),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),
            nn.MaxPool2d(kernel_size=3, stride=2, padding = 32),
        )

票数 3
EN

Stack Overflow用户

发布于 2020-06-03 06:59:26

公式为:K=(n-1)/ 2,其中n是核大小。下面是一个可视化的例子:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62166719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档