torch 卷积、反卷积、pooling输出大小

卷积

Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1)
H n e w = ⌊ H o l d + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l _ s i z e − 1 ) − 1 s t r i d e + 1 ⌋ = ⌊ H o l d + 2 × 0 − 1 × ( k e r n e l _ s i z e − 1 ) − 1 1 + 1 ⌋ \begin{aligned} {H_{new}}&=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times padding-dilation\times ( kernel\_size-1) -1}{stride} +1 \right\rfloor \\ &=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times \textcolor{red}{0}-\textcolor{red}{1}\times ( kernel\_size-1) -1}{\textcolor{red}{1}} +1 \right\rfloor \end{aligned} Hnew=strideHold+2×paddingdilation×(kernel_size1)1+1=1Hold+2×01×(kernel_size1)1+1
红色表示 默认参数值 \textcolor{red}{默认参数值} 默认参数值
k e r n e l _ s i z e kernel\_size kernel_size 没有默认参数值,属于调用卷积时必须人为指定。
⌊ x ⌋ \left\lfloor x \right\rfloor x表示对 x x x进行向下取整

反卷积

ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, dilation=1)
H n e w = ( H o l d − 1 ) × s t r i d e − 2 × p a d d i n g + d i l a t i o n × ( k e r n e l _ s i z e − 1 ) + o u t p u t _ p a d d i n g + 1 = ( H o l d − 1 ) × 1 − 2 × 0 + 1 × ( k e r n e l _ s i z e − 1 ) + 0 + 1 \begin{aligned} {H_{new}}&=( \textcolor{blue}{H_{old}} -1) \times stride-2\times padding+dilation\times ( kernel\_size-1) +output\_padding+1 \\ &=( \textcolor{blue}{H_{old}} -1) \times \textcolor{red}{1}-2\times \textcolor{red}{0}+\textcolor{red}{1}\times ( kernel\_size-1) +\textcolor{red}{0}+1 \end{aligned} Hnew=(Hold1)×stride2×padding+dilation×(kernel_size1)+output_padding+1=(Hold1)×12×0+1×(kernel_size1)+0+1

average pooling

avg_pool2d(input, kernel_size, stride=None, padding=0)
H n e w = ⌊ H o l d + 2 × p a d d i n g − k e r n e l _ s i z e s t r i d e + 1 ⌋ = ⌊ H o l d + 2 × 0 − k e r n e l _ s i z e k e r n e l _ s i z e + 1 ⌋ \begin{aligned} H_{new} &=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times padding-kernel\_size}{stride} +1\right\rfloor \\ &=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times \textcolor{red}{0}-kernel\_size}{ \textcolor{red}{kernel\_size}} +1\right\rfloor \end{aligned} Hnew=strideHold+2×paddingkernel_size+1=kernel_sizeHold+2×0kernel_size+1
input 中包括张量的高 H o l d \textcolor{blue}{H_{old}} Hold和宽 W o l d W_{old} Wold(因为 W n e w W_{new} Wnew的维度更新方式和 H n e w {H_{new}} Hnew一样,所以本文中没有列出 W n e w W_{new} Wnew的更新方式)
s t i d e stide stide的默认参数是人为指定的 k e r n e _ s i z e \textcolor{red}{kerne\_size} kerne_size值。

max pooling

MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
H n e w = ⌊ H o l d + 2 × p a d d i n g − d i l a t i o n × ( k e r n e l _ s i z e − 1 ) − 1 s t r i d e + 1 ⌋ = ⌊ H o l d + 2 × 0 − 1 × ( k e r n e l _ s i z e − 1 ) − 1 k e r n e l _ s i z e + 1 ⌋ \begin{aligned} H_{new} &=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times padding-dilation\times ( kernel\_size-1) -1}{stride} +1\right\rfloor \\ &=\left\lfloor \frac{\textcolor{blue}{H_{old}} +2\times \textcolor{red}{0}-\textcolor{red}{1}\times ( kernel\_size-1) -1}{\textcolor{red}{kernel\_size}} +1\right\rfloor \end{aligned} Hnew=strideHold+2×paddingdilation×(kernel_size1)1+1=kernel_sizeHold+2×01×(kernel_size1)1+1

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卷积神经网络(Convolutional Neural Network,简称CNN)是一种在计算机视觉和图像处理领域广泛应用的深度学习模型。在PyTorch中,可以使用torch.nn模块来构建和训练CNN模型。 首先,你需要导入相应的库: ```python import torch import torch.nn as nn ``` 然后,你可以定义一个CNN模型。一个典型的CNN模型通常由卷积层(Convolutional Layer)、池化层(Pooling Layer)和全连接层(Fully Connected Layer)组成。 下面是一个简单的例子: ```python class CNN(nn.Module): def __init__(self): super(CNN, self).__init__() # 定义卷积层 self.conv1 = nn.Conv2d(1, 16, kernel_size=3, stride=1, padding=1) self.conv2 = nn.Conv2d(16, 32, kernel_size=3, stride=1, padding=1) # 定义池化层 self.pool = nn.MaxPool2d(kernel_size=2, stride=2) # 定义全连接层 self.fc = nn.Linear(32 * 7 * 7, 10) # 假设输入图像大小为28x28 def forward(self, x): x = self.conv1(x) x = nn.ReLU()(x) x = self.pool(x) x = self.conv2(x) x = nn.ReLU()(x) x = self.pool(x) x = x.view(x.size(0), -1) x = self.fc(x) return x ``` 在上面的例子中,我们定义了一个具有两个卷积层、两个池化层和一个全连接层的CNN模型。在forward方法中,我们定义了模型的前向传播过程。 创建一个CNN模型的实例后,你可以使用PyTorch提供的优化器(如SGD或Adam)和损失函数(如交叉熵损失)来训练模型。 希望这个简单的例子能对你有所帮助!如果有更详细或者其他方面的问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值