理解CNN参数及PyTorch实例,卷积核kernel,层数Channels,步长Stride,填充Padding,池化Pooling,PyTorch中的相关方法,MNIST例子

本文主要是介绍理解CNN参数及PyTorch实例,卷积核kernel,层数Channels,步长Stride,填充Padding,池化Pooling,PyTorch中的相关方法,MNIST例子,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.34.理解CNN参数及PyTorch实例
1.34.1.卷积核kernel
1.34.2.层数Channels
1.34.3.步长Stride
1.34.4.填充Padding
1.34.5.池化Pooling
1.34.6.PyTorch中的相关方法
1.34.7.MNIST例子

1.34.理解CNN参数及PyTorch实例

参考地址:http://guileen.github.io/2019/12/24/understanding-cnn/

在实际的项目中,会发现CNN有多个参数需要调整,本文主要目的在于理清各个参数的作用。

1.34.1.卷积核kernel

Kernel,卷积核,有时也称为filter。在迭代过程中,学习的结果就保存在kernel里面。深度学习,学习的就是一个权重。kernel的尺寸越小,计算量越小,一般选择3x3,更小就没有意义了。
在这里插入图片描述
结果是对卷积核与一小块输入数据的点积。

1.34.2.层数Channels

在这里插入图片描述
所有位置的点积构成一个激活层。
在这里插入图片描述
如果我们有6个卷积核,我们就会有6个激活层。

1.34.3.步长Stride

在这里插入图片描述
上图是每次向右移动一格,一行结束向下移动一行,所以stride是1x1,如果是移动2格2行则是2x2。

1.34.4.填充Padding

Padding的作用是为了获取图片上下左右边缘的特征。
在这里插入图片描述

1.34.5.池化Pooling

卷积层为了提取特征,但是卷积层提取完特征后特征图层依然很大。为了减少计算量,我们可以用padding的方式来减小特征图层。Pooling的方法有MaxPooling核AveragePooling。
在这里插入图片描述

1.34.6.PyTorch中的相关方法

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode=’zeros’)
torch.nn.MaxPool2d(kernel_size, stride=None, padding=0, dilation=1, return_indices=False, ceil_mode=False)
stride默认与kernel_size相等
torch.nn.AvgPool2d(kernel_size, stride=None, padding=0, ceil_mode=False, count_include_pad=True, divisor_override=None)
Tensor.view(*shape) -> Tensor
用于将卷积层展开为全连接层

x = torch.randn(4, 4)
x.size()“””
输出结果:
torch.Size([4, 4])
“””y = x.view(16)
y.size()
“””
输出结果:
torch.Size([16])
“””z = x.view(-1, 8)   # the size -1 is inferred from other dimensions
z.size()
“””
输出结果:
torch.Size([2, 8])
“””

1.34.7.MNIST例子

MNIST 数据集的输入是 1x28x28 的数据集。在实际开发中必须要清楚每一次的输出结构。

我们第一层使用 5x5的卷积核,步长为1,padding为0,28-5+1 = 24,那么输出就是 24x24。计算方法是 (input_size - kernel_size)/ stride + 1。
我们第二层使用 2x2的MaxPool,那么输出为 12x12。
第三层再使用5x5,卷积核,输出则为 12-5+1,即 8x8。
再使用 2x2 MaxPool,输出则为 4x4。
在这里插入图片描述

# -*- coding: UTF-8 -*-import torch.nn as nn
import torch.nn.functional as Fclass Net(nn.Module):"""ConvNet -> Max_Pool -> RELU -> ConvNet -> Max_Pool -> RELU -> FC -> RELU -> FC -> SOFTMAX"""def __init__(self):super(Net, self).__init__()self.conv1 = nn.Conv2d(1, 10, 5, 1)self.conv2 = nn.Conv2d(10, 20, 5, 1)self.fc1 = nn.Linear(4*4*20, 50)self.fc2 = nn.Linear(50, 10)def forward(self, x):x = F.relu(self.conv1(x))x = F.max_pool2d(x, 2, 2)x = F.relu(self.conv2(x))x = F.max_pool2d(x, 2, 2)x = x.view(-1, 4*4*20)x = F.relu(self.fc1(x))x = self.fc2(x)return F.log_softmax(x, dim=1)

这篇关于理解CNN参数及PyTorch实例,卷积核kernel,层数Channels,步长Stride,填充Padding,池化Pooling,PyTorch中的相关方法,MNIST例子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/918132

相关文章

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例

《PyTorch中的词嵌入层(nn.Embedding)详解与实战应用示例》词嵌入解决NLP维度灾难,捕捉语义关系,PyTorch的nn.Embedding模块提供灵活实现,支持参数配置、预训练及变长... 目录一、词嵌入(Word Embedding)简介为什么需要词嵌入?二、PyTorch中的nn.Em

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态