学习日志整理2:神经网络改进方案——空洞卷积与HDC

0.空洞卷积是什么?HDC又是啥?

空洞卷积说白了就是把kernel变成筛状

两张图看明白。图源:

https://www.jianshu.com/p/f743bd9041b3

传统卷积核:
在这里插入图片描述
空洞卷积核:
在这里插入图片描述
HDC又是对空洞卷积的一种改进,可以说他是空洞卷积的一种特殊结构

1.为何采用空洞卷积?

一句话:为了增大感受野,从而抵消一部分池化层造成的信息丢失

由此引出两个问题:
(1)什么是感受野?
(2)为什么池化层信息会丢失?

1.0.形象理解感受野

目前看网络上的一些帖子都采用的论文图,开始理解起来有一些困难,这里放上我个人的理解,如果有不对的地方欢迎大家指正。

首先,以3x3传统卷积为例,我们回顾一下图片卷积的工作模式。

正着说,就是(靠上层中的)一片3x3区域被压缩为(靠下层中的)一个点
在这里插入图片描述
那逆过来,就是(靠下层中的)一个点等效于(靠上层中的)一片3x3区域

  • 19
    点赞
  • 83
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用torch.nn实现空洞卷积,可以通过torch.nn模块中的Conv2d函数来实现。空洞卷积是在正常卷积操作基础上引入dilation参数来实现的。 首先,需要创建一个Conv2d对象,传入输入通道数、输出通道数、卷积核大小和padding参数。在这个对象上设置dilation参数,可以通过传入一个tuple或者一个int来实现。如果传入一个int,则会在卷积核的各个维度上应用相同的dilation;如果传入一个tuple,则可以针对每个维度指定不同的dilation。 例如,使用dilation参数为1、2和5的空洞卷积,并将它们堆叠在一起,可以按照下面的方式进行: ``` import torch import torch.nn as nn # 创建一个输入张量 input = torch.randn(1, 64, 128, 128) # 创建空洞卷积层 conv1 = nn.Conv2d(64, 64, kernel_size=3, padding=1, dilation=1) conv2 = nn.Conv2d(64, 64, kernel_size=3, padding=2, dilation=2) conv3 = nn.Conv2d(64, 64, kernel_size=3, padding=5, dilation=5) # 对输入进行多层堆叠空洞卷积操作 output = conv3(conv2(conv1(input))) print(output.size()) ``` 在上面的代码中,我们首先创建了一个输入张量input,它的形状为[1, 64, 128, 128]。然后,我们创建了三个不同dilation参数的空洞卷积层conv1、conv2和conv3。最后,我们对输入张量进行多层堆叠空洞卷积操作,并打印输出张量output的形状。 需要注意的是,该代码只是实现了一个简单的例子,实际中可以根据具体的需求调整输入通道数、输出通道数、卷积核大小、padding参数和dilation参数等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值