卷积神经网络CNN基础——常见的层(PyTorch)

关于卷积神经网络

大家好,关于卷积神经网络(Convolutional Neural Networks, CNN)的概念,这里就不啰嗦了,网上的内容太多了。然而对初学者,在学到各的概念时,理解不是很深刻。本文介绍几种常见的,希望能帮助初学者理解。

与普通神经网络类似,卷积神经网络的结构也是逐链接的。其中,常见的层当属卷积层,除此之外,还有一些其他的层。

卷积层

卷积层是CNN中的基本网络层,主要用于对图像进行特征提取操作,其卷积核权重是共享权值的,对应的相关概念还包括步长,填充。

import torch
from torch import nn

# 创建数据 img:2 张具有 3 个通道的图像,大小为 5*6
img = torch.arange(30*6, dtype=torch.float).reshape(-1, 3, 5, 6)
print(img.shape)  # (2, 3, 5, 6)

# 对 img 进行卷积操作:用 2*2 大小的核进行卷积,
'''
说明:由 3 通道的图像变到 4 通道特征,这需要 4 个核
   (1) 每个核都要作用在 3 通道图像上,故每个核的实际大小为 3*2*2(12 个参数)
   (2) 生成 4 通道特征,因此需要 4 个核,故本层的实际参数量为 4*3*2*2 = 48 个
'''
L = nn.Conv2d(3, 4, kernel_size=(2,2))
img = L(img)
print(img.shape)

# 显示该层包含的参数
print(L.state_dict().keys())			# odict_keys(['weight', 'bias'])
print(L.state_dict()['weight'].shape)   # (4, 3, 2, 2):核的实际大小
print(L.state_dict()['bias'].shape)     # (4):每个核需要一个偏置

# 继续对 img 进行卷积操作:用 3*3 大小的核进行卷积,
'''
说明:由 4 通道的图像变到 2 通道特征,这需要 2 个核
   (1) 每个核都要作用在 4 通道图像上,故每个核的实际大小为 4*3*3(36 个参数)
   (2) 生成 2 通道特征,因此需要 2 个核,故本层的实际参数量为 2*4*3*3 = 72 个
'''
img = nn.Conv2d(4, 2, kernel_size=3, padding=3)(img)
print(img.shape)

# 再次对 img 进行卷积操作:用 2*2 大小的核进行卷积,
'''
说明:由 2 通道的图像变到 5 通道特征,这需要 5 个核
   (1) 每个核都要作用在 2 通道图像上,故每个核的实际大小为 2*2*2(8 个参数)
   (2) 生成 5 通道特征,因此需要 5 个核,故本层的实际参数量为 5*2*2*2 = 40 个
   (3) 本层中加入了 padding 和 stride 参数,其含义请自己查阅文档
'''
img = nn.Conv2d(2, 5, kernel_size=2, padding=1, stride=2)(img)
print(img.shape)

# 再做一次卷积,请大家自己分析(加入了 dilation 参数)
img = nn.Conv2d(5, 10, kernel_size=3, padding=(2,1), dilation=2)(img)
print(img.shape)

激活层

# 仅以 ReLU 为例。若要了解其他常用的激活函数,请查阅文档
L = nn.ReLU(inplace=True)   # inplace 表示直接在原始数据上进行激活
img = L(img)
print(img.shape)

print(L.state_dict())   # 激活层一般不需要参数,所以本行输出空

池化层

# 这里用最大化池化方式进行池化,其他方法请查阅文档
img = nn.MaxPool2d(kernel_size=2, stride=2, padding=1)(img)
print(img.shape)

特殊的池化层

# 为了使池化后的图像尺寸满足特定要求,可以用自适应池化
# 下面代码是自适应平均池化,它通过裁剪或插值方式使每张图像的每个通道都变成 3*3 大小
img = nn.AdaptiveAvgPool2d((3, 3))(img)  
print(img.shape)
# 还有一些自适应平均池化方法,请查阅文档

扁平层

# 把二维特征扁平化,使每张图像都变成一个向量
img = nn.Flatten()(img)
print(img.shape)
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张博1987

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值