热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

PyTorch实用技巧汇总(持续更新中)

空洞卷积(DilatedConvolutions)在卷积操作中通过在卷积核元素之间插入空格来扩大感受野,这一过程由超参数dilationrate控制。这种技术在保持参数数量不变的情况下,能够有效地捕捉更大范围的上下文信息,适用于多种视觉任务,如图像分割和目标检测。本文将详细介绍空洞卷积的计算原理及其应用场景。

空洞卷积的计算过程

Dilated convolutions 在卷积的时候,会在卷积核元素之间塞入空格,塞入的空格与hyper-parameter: dilation有关(记为d),则塞入的空格为d-1。

1、感受野计算。假定原来的卷积核大小为 k,那么塞入了 (d - 1) 个空格后的卷积核的感受野大小为:

 2、特征图大小计算。假定输入空洞卷积的大小为 i,步长 为 s ,空洞卷积后特征图大小 o 的计算公式为:

 p为padding, s为stride,k为卷积核大小, d为dilation


nn.ReLU(inplace = True)中inplace的作用

在文档中解释是:

参数: inplace-选择是否进行覆盖运算

意思是是否将得到的值计算得到的值覆盖之前的值,比如:

x = x +1

即对原值进行操作,然后将得到的值又直接复制到该值中

而不是覆盖运算的例子如:

y = x + 1
x = y

这样就需要花费内存去多存储一个变量y

所以

nn.Conv2d(3, 64, kernel_size=11, stride=4, padding=2),
nn.ReLU(inplace=True)

的意思就是对从上层网络Conv2d中传递下来的tensor直接进行修改,这样能够节省运算内存,不用多存储其他变量


模型结构可视化: summary

import torch
import torch.nn as nn
import torch.nn.functional as F
from torchsummary import summaryclass Net(nn.Module):def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, kernel_size=5)self.conv2 = nn.Conv2d(10, 20, kernel_size=5)self.conv2_drop = nn.Dropout2d()self.fc1 = nn.Linear(320, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(F.max_pool2d(self.conv1(x), 2))x = F.relu(F.max_pool2d(self.conv2_drop(self.conv2(x)), 2))x = x.view(-1, 320)x = F.relu(self.fc1(x))x = F.dropout(x, training=self.training)x = self.fc2(x)return F.log_softmax(x, dim=1)device = torch.device("cuda" if torch.cuda.is_available() else "cpu") # PyTorch v0.4.0
model = Net().to(device)summary(model, (1, 28, 28))

----------------------------------------------------------------Layer (type) Output Shape Param #
================================================================Conv2d-1 [-1, 10, 24, 24] 260Conv2d-2 [-1, 20, 8, 8] 5,020Dropout2d-3 [-1, 20, 8, 8] 0Linear-4 [-1, 50] 16,050Linear-5 [-1, 10] 510
================================================================
Total params: 21,840
Trainable params: 21,840
Non-trainable params: 0
----------------------------------------------------------------
Input size (MB): 0.00
Forward/backward pass size (MB): 0.06
Params size (MB): 0.08
Estimated Total Size (MB): 0.15
----------------------------------------------------------------

推荐阅读
author-avatar
desn
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有