PyTorch学习笔记-Convolution Layers与Pooling Layers
1. Convolution Layers
由于图像是二维的,因此基本上最常用到的就是二维的卷积类:torch.nn.Conv2d
,官方文档:torch.nn.Conv2d。
Conv2d
的主要参数有以下几个:
in_channels
:输入图像的通道数,彩色图像一般都是三通道。out_channels
:通过卷积后产生的输出图像的通道数。kernel_size
:可以是一个数或一个元组,表示卷积核的大小,卷积核的参数是从数据的分布中采样得到的,这些数是多少无所谓,因为在神经网络训练的过程中就是对这些参数进行不断地调整。stride
:步长。padding
:填充。padding_mode
:填充模式,有zeros
、reflect
、replicate
、circular
,默认为zeros
。dilation
:可以是一个数或一个元组,表示卷积核各个元素间的距离。group
:一般设置为1,基本用不到。bias
:偏置,一般设置为 True。
例如以下代码构建了一个只有一层卷积层的神经网络,该卷积层的输入和输出通道数都为三通道,卷积核大小为3*3,步长为1,无填充,然后用 CIFAR10 测试数据集进行测试:
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import torch.nn as nntest_set = datasets.CIFAR10('dataset/CIFAR10', train=False, transform=transforms.ToTensor())data_loader = DataLoader(test_set, batch_size=64)class Network(nn.Module):def __init__(self):super(Network, self).__init__()self.conv1 = nn.Conv2d(in_channels=3, out_channels=3, kernel_size=3, stride=1, padding=0)def forward(self, input):output = self.conv1(input)return outputnetwork = Network()
print(network) # Network((conv1): Conv2d(3, 6, kernel_size=(3, 3), stride=(1, 1)))writer = SummaryWriter('logs')for step, data in enumerate(data_loader):imgs, targets = dataoutput = network(imgs)writer.add_images('input', imgs, step)writer.add_images('output', output, step)writer.close()
测试结果如下:
可以看到卷积运算能够提取输入图像的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
2. Pooling Layers
Pooling Layers 相关函数介绍的官方文档:Pooling Layers。
其中的 MaxPool
表示最大池化,也称上采样;MaxUnpool
表示最小池化,也称下采样;AvgPool
表示平均池化。其中最常用的为 MaxPool2d
,官方文档:torch.nn.MaxPool2d。
最大池化的步骤如下图所示:
MaxPool2d
的主要参数有以下几个:
kernel_size
:用来取最大值的窗口(池化核)大小,和之前的卷积核类似。stride
:步长,注意默认值为kernel_size
。padding
:填充,和Conv2d
一样。dilation
:池化核中各个元素间的距离,和Conv2d
一样。return_indices
:如果为 True,表示返回值中包含最大值位置的索引。注意这个最大值指的是在所有窗口中产生的最大值,如果窗口产生的最大值总共有5个,就会有5个返回值。ceil_mode
:如果为 True,表示在计算输出结果形状的时候,使用向上取整,否则默认向下取整。
输出结果形状的计算公式如下:
接下来我们用代码实现这个池化层:
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import torch.nn as nn
import torchclass Network(nn.Module):def __init__(self):super(Network, self).__init__()self.maxpool1 = nn.MaxPool2d(kernel_size=2)def forward(self, input):output = self.maxpool1(input)return outputinput = torch.tensor([[1, 2, 1, 0],[0, 1, 2, 3],[3, 0, 1, 2],[2, 4, 0, 1]
], dtype=torch.float32) # 注意池化层读入的数据需要为浮点型input = torch.reshape(input, (1, 1, 4, 4))network = Network()
print(network) # Network((maxpool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False))output = network(input)
print(output)
# tensor([[[[2., 3.],
# [4., 2.]]]])
我们用图像来试试效果:
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
from torch.utils.tensorboard import SummaryWriter
import torch.nn as nntest_set = datasets.CIFAR10('dataset/CIFAR10', train=False, transform=transforms.ToTensor())data_loader = DataLoader(test_set, batch_size=64)class Network(nn.Module):def __init__(self):super(Network, self).__init__()self.maxpool1 = nn.MaxPool2d(kernel_size=2)def forward(self, input):output = self.maxpool1(input)return outputnetwork = Network()writer = SummaryWriter('logs')for step, data in enumerate(data_loader):imgs, targets = dataoutput = network(imgs)writer.add_images('input', imgs, step)writer.add_images('output', output, step)writer.close()
测试结果如下:
可以看到最大池化的目的是保留输入数据的特征,同时减小特征的数据量。
PyTorch学习笔记-Convolution Layers与Pooling Layers相关推荐
- 深度学习入门之PyTorch学习笔记:卷积神经网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 4 卷积神经网络 4.1 主要任务及起源 4.2 卷积神经网络的原理和结构 4.2.1 卷积层 1. ...
- PyTorch学习笔记(五):模型定义、修改、保存
往期学习资料推荐: 1.Pytorch实战笔记_GoAI的博客-CSDN博客 2.Pytorch入门教程_GoAI的博客-CSDN博客 本系列目录: PyTorch学习笔记(一):PyTorch环境安 ...
- PyTorch学习笔记(六)——Sequential类、参数管理与GPU
系列文章\text{\bf 系列文章}系列文章 PyTorch学习笔记(一)--Tensor的基础语法 PyTorch学习笔记(二)--自动微分 PyTorch学习笔记(三)--Dataset和Dat ...
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- pytorch学习笔记(二):gradien
pytorch学习笔记(二):gradient 2017年01月21日 11:15:45 阅读数:17030
- PyTorch学习笔记(二)——回归
PyTorch学习笔记(二)--回归 本文主要是用PyTorch来实现一个简单的回归任务. 编辑器:spyder 1.引入相应的包及生成伪数据 import torch import torch.nn ...
- pytorch 学习笔记目录
1 部分内容 pytorch笔记 pytorch模型中的parameter与buffer_刘文巾的博客-CSDN博客 pytorch学习笔记 torchnn.ModuleList_刘文巾的博客-CSD ...
- pytorch学习笔记 torchnn.ModuleList
1 nn.ModuleList原理 nn.ModuleList,它是一个储存不同 module,并自动将每个 module 的 parameters 添加到网络之中的容器. 你可以把任意 nn.Mod ...
- 深度学习入门之PyTorch学习笔记:多层全连接网络
深度学习入门之PyTorch学习笔记 绪论 1 深度学习介绍 2 深度学习框架 3 多层全连接网络 3.1 PyTorch基础 3.2 线性模型 3.2.1 问题介绍 3.2.2 一维线性回归 3.2 ...
最新文章
- 解决Windows7下vs2008 Active control test container 不能运行的问题
- CAPSNET:具有自我注意路由的胶囊网络
- Exchange服务器系列课程之七--维护邮件服务器(二)
- dbcp2和dbcp 1.4在API层面的差异
- centos7安装FTP
- ASP.NET 2.0防止同一用户同时登陆【转】
- python中sin函数在哪个模块中_从零开始第5步:Python 函数和模块
- 如何开发rest接口服务_如何简化网络请求接口开发
- 天猫净饮水行业趋势白皮书2021
- inurl news.php id,news.php
- 为什么你的数据库经常会被破防呢?原因原来是这——Sql注入问题(源码+文字深度解析)
- kubernetes 查看所有namespace、默认的namespace
- 最全的【英语词根词缀思维导图总结】
- Linux系统下制作windows系统安装U盘
- linux 禁用超线程,Linux动态启用/禁用超线程技术
- 基于multisim的语音放大器电路设计
- 开机自动随机改计算机名,【优化电脑·禁止随机启动项·加速开机】
- 温升测试仪-Type-C插头温升测试
- Android判断手机号码是否是正确的手机号码
- PLL中的locked信号解析