用 Pytorch 理解卷积网络

深度学习|卷积神经网络 介绍卷积神经网络基本理论,包括卷积层、池化层和全连接层,并阐述LeNet卷积神经网络的构建过程。 阅读详情

来源:AI开发者

翻译:天字一号、雪丽•斯梅德

审校:鸢尾、唐里

在当今时代,机器在理解和识别图像中的特征和目标方面已经成功实现了99%的精度。我们每天都会看到这种情况-智能手机可以识别相机中的面部;使用Google图片搜索特定照片的能力;从条形码或书籍中扫描文本。借助卷积神经网络(CNN),这一切都是可能的,卷积神经网络是一种特定类型的神经网络,也称为卷积网络。

如果您是一名深度学习爱好者,那么您可能已经听说过卷积神经网络,也许您甚至自己开发了一些图像分类器。像Tensorflow和PyTorch这样的现代深度学习框架使向机器学习图像变得容易,但是,仍然存在一些问题:数据如何通过神经网络的人工层传递?计算机如何从中学习?更好地解释卷积神经网络的一种方法是使用PyTorch。因此,让我们通过可视化每个图层的图像来深入研究CNN。

    卷积神经网络的解释

什么是卷积神经网络?

卷积神经网络(CNN)是一种特殊类型的神经网络,在图像上表现特别出色。卷积神经网络由Yan LeCun在1998年提出,可以识别给定输入图像中存在的数字。

在开始使用卷积神经网络之前,了解神经网络的工作原理很重要。神经网络模仿人脑如何解决复杂的问题并在给定的数据集中找到模式。在过去的几年中,神经网络席卷了许多机器学习和计算机视觉算法。

神经网络的基本模型由组织在不同层中的神经元组成。每个神经网络都有一个输入层和一个输出层,并根据问题的复杂性增加了许多隐藏层。一旦数据通过这些层,神经元就会学习并识别模式。神经网络的这种表示称为模型。训练完模型后,我们要求网络根据测试数据进行预测。如果您不熟悉神经网络,那么这篇有关使用Python进行深度学习的文章就是一个很好的起点。

另一方面,CNN是一种特殊的神经网络,在图像上表现特别出色。卷积神经网络由Yan LeCun在1998年提出,可以识别给定输入图像中存在的数字。使用CNN的其他应用程序包括语音识别,图像分割和文本处理。在卷积神经网络之前,多层感知器(MLP)用于构建图像分类器。

图像分类是指从多波段光栅图像中提取信息类别的任务。多层感知器需要更多的时间和空间来在图片中查找信息,因为每个输入功能都需要与下一层的每个神经元相连。CNN通过使用称为本地连接的概念取代了MLP,该概念涉及将每个神经元仅连接到输入体积的本地区域。通过允许网络的不同部分专门处理高级功能(如纹理或重复图案),可以最大程度地减少参数数量。感到困惑?别担心。让我们比较一下图像如何通过多层感知器和卷积神经网络进行传递的,以更好地理解。

    比较MLPS和CNNS

考虑到MNIST数据集,由于输入图像的大小为28x28 = 784,多层感知器输入层的总数将为784。 网络应该能够预测给定输入图像中的数量,这意味着输出可能属于以下范围中的任何一个,范围从0到9(1、2、3、4、5、6、7、8、9 )。 在输出层中,我们返回类别分数,例如,如果给定的输入是具有数字“ 3”的图像,则在输出层中,对应的神经元“ 3”比其他神经元具有更高的类别分数。 我们需要包含多少个隐藏层,每个层中应该包含多少个神经元?这是一个编码MLP的示例:


上面的代码段是使用称为Keras的框架实现的(暂时忽略语法)。它告诉我们在第一个隐藏层中有512个神经元,它们连接到形状为784的输入层。该隐藏层之后是一个随机失活层,该层克服了过拟合的问题。0.2表示在第一个隐藏层之后不考虑神经元的可能性为20%。再次,我们在第二个隐藏层中添加了与第一个隐藏层中相同数量的神经元(512),然后添加了另一个随机失活。最后,我们用包含10个类的输出层结束这组层。具有最高值的此类将是模型预测结果。

这是定义所有层之后的网络多层外观。这种多层感知器的一个缺点是全连接的以供网络学习,这需要更多的时间和空间。MLP仅接受向量作为输入。

卷积层不使用全连接层,而是使用稀疏连接层,也就是说,它们接受矩阵作为输入,这比MLP更具优势。输入特征连接到本地编码节点。在MLP中,每个节点负责获得对整个画面的理解。在CNN中,我们将图像分解为区域(像素的局部区域)。每个隐藏节点都必须输出层报告,在输出层,输出层将接收到的数据组合起来以找到模式。下图显示了各层如何本地连接。

在我们了解CNN如何在图片中找到信息之前,我们需要了解如何提取特征。卷积神经网络使用不同的图层,每一层将保存图像中的特征。例如,考虑一张狗的照片。每当网络需要对狗进行分类时,它都应该识别所有特征-眼睛,耳朵,舌头,腿等。使用过滤器和核,这些特征被分解并在网络的局部层中识别出来。

    计算机如何看图像?

与人类通过用眼睛了解图像的计算机不同,计算机使用一组介于0到255之间的像素值来了解图片。计算机查看这些像素值并理解它们。乍一看,它不知道物体或颜色,只识别像素值,这就是图像用于计算机的全部。

在分析像素值之后,计算机会慢慢开始了解图像是灰度还是彩色。它知道差异,因为灰度图像只有一个通道,因为每个像素代表一种颜色的强度。零表示黑色,255表示白色,黑色和白色的其他变化形式,即介于两者之间的灰色。另一方面,彩色图像具有三个通道-红色,绿色和蓝色。它们代表三种颜色(3D矩阵)的强度,并且当值同时变化时,它会产生大量的颜色!确定颜色属性后,计算机会识别图像中对象的曲线和轮廓。

可以使用PyTorch在卷积神经网络中探索此过程,以加载数据集并将滤波器应用于图像。下面是代码片段。(在GitHub上可找到此代码)

  

现在,让我们看看如何将单个图像输入神经网络。

(在GitHub上可找到此代码)

img = np.squeeze(images[7])fig = plt.figure(figsize = (12,12)) ax = fig.add_subplot(111)ax.imshow(img, cmap='gray')width, height = img.shapethresh = img.max()/2.5for x in range(width):    for y in range(height):        val = round(img[x][y],2) if img[x][y] !=0 else 0        ax.annotate(str(val), xy=(y,x),            color='white' if img[x][y]<thresh else 'black')

 

这就是将数字“ 3”分解为像素的方式。从一组手写数字中,随机选择“ 3”,其中显示像素值。在这里,ToTensor()归一化实际像素值(0–255)并将其限制为0到1。为什么?因为,这使得以后的部分中的计算更加容易,无论是在解释图像还是找到图像中存在的通用模式。

    建立自己的滤波器

在卷积神经网络中,图像中的像素信息被过滤。为什么我们完全需要滤波器?就像孩子一样,计算机需要经历了解图像的学习过程。值得庆幸的是,这不需要几年的时间!计算机通过从头开始学习,然后逐步进行到整体来完成此任务。因此,网络必须首先知道图像中的所有原始部分,例如边缘,轮廓和其他低层特征。一旦检测到这些,计算机便可以处理更复杂的功能。简而言之,必须先提取低级功能,然后再提取中级功能,然后再提取高级功能。滤波器提供了一种提取信息的方法。

可以使用特定的滤波器提取低级特征,该滤波器也是类似于图像的一组像素值。可以理解为连接CNN中各层的权重。将这些权重或滤波器与输入相乘,得出中间图像,中间图像表示计算机对图像的部分理解。然后,这些副产品再与更多的滤波器相乘以扩展视图。该过程以及对功能的检测一直持续到计算机了解其外观为止。

您可以根据自己的需要使用很多滤波器。您可能需要模糊,锐化,加深,进行边缘检测等-都是滤波器。

让我们看一些代码片段,以了解滤波器的功能。



这是应用滤波器后图像的外观。在这种情况下,我们使用了Sobel 滤波器 。

    完整的卷积神经网络(CNNS)

我们已经知道滤波器是如何从图像中提出特征了,但是为了完成整个卷积神经网络我们需要理解用来设计CNN的各层。卷积神经网络中的各层分别叫做:

1.卷积层

2.池化层

3.全连接层

使用这3层,可以构造类似这样的图像分类器:

CNN各层的作用

现在让我们一起来看看各层是用来干什么的

卷积层——卷积层(CONV)使用过滤器执行卷积操作,同时扫描输入图像的尺寸。它的超参数包括滤波器尺寸,通常设置为2x2,3x3,4x4,5x5(但并不仅限于这些尺寸),步长(S)。输出结果(O)被称为特征图或激活图,包含了输入层和滤波器计算出的所有特性。下图描述了应用卷积时产生的特征图:

卷积操作

池化层——池化层(POOL)用于特征的降采样,通常在卷积层之后应用 。常见的两种池化操作为最大池化和平均池化,分别求取特征的最大值和平均值。下图描述了池化的基本原理:

最大池化

平均池化

全连接层——全连接层(FC)作用于一个扁平的输入,其中每个输入都连接到所有的神经元 。全连接层通常用于网络的末端,将隐藏层连接到输出层,这有助于优化类分数。 

全连接层

    在Pytorch可视化CNN

我们对CNN的函数有了更好的了解,现在让我们使用Facebook的PyTorch框架来实现它。

步骤1:加载输入图像。我们将使用Numpy和OpenCV。(在GitHub上可找到代码)

  

  

步骤2:可视化滤波器,以更好地了解我们将使用的滤波器。(在GitHub上可找到代码)

步骤3:定义卷积神经网络。该CNN具有卷积层和最大池化层,并且权重使用上述滤波器进行初始化:(在GitHub上可找到代码)

步骤4:可视化滤波器。快速浏览一下正在使用的滤波器。(在GitHub上可找到代码)

def viz_layer(layer, n_filters= 4):    fig = plt.figure(figsize=(20, 20))
for i in range(n_filters): ax = fig.add_subplot(1, n_filters, i+1) ax.imshow(np.squeeze(layer[0,i].data.numpy()), cmap='gray') ax.set_title('Output %s' % str(i+1))fig = plt.figure(figsize=(12, 6))fig.subplots_adjust(left=0, right=1.5, bottom=0.8, top=1, hspace=0.05, wspace=0.05)for i in range(4): ax = fig.add_subplot(1, 4, i+1, xticks=[], yticks=[]) ax.imshow(filters[i], cmap='gray') ax.set_title('Filter %s' % str(i+1))
gray_img_tensor = torch.from_numpy(gray_img).unsqueeze(0).unsqueeze(1)

滤波器:

步骤5:跨层滤波器输出。 在CONV和POOL层中输出的图像如下所示。

viz_layer(activated_layer)viz_layer(pooled_layer)

卷积层

池化层

参考:CS230 CNNs(https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-convolutional-neural-networks).

可以在这里查看代码:https://github.com/vihar/visualising-cnns

(完)


FCN全卷积网络理解及代码实现(来自pytorch官方实现) FCN是首个端对端的针对像素级预测的全卷积网络 而换为卷积层之后,最后得到的是1000通道的2D图像,可以可视化为heat map图。一般说的vgg16是D: 全连接操作前后:77512(通道) 【假设忽略偏置】\color{red}{【假设忽略偏置】}【假设忽略偏置】 全连接FC1计算:计算对应某一个结点的输出,将该节点与上一层某一个结点的权重与输入对应节点数值相乘,再求和下层使用7*7的卷积核、stride=1,4096个卷积核的一个卷积层一个卷积核和FC1一个节点参数量一样\color{red}{一 阅读详情

相关推荐

PyTorch深度学习实战(11)——卷积神经网络

卷积神经网络 (Convolutional Neural Network, CNN) 是一种广泛应用的深度学习模型。通过参数共享、局部感知和空间结构等优势,能够更好地处理图像数据,并在图像识别、目标检测和图像生成等任务中展现出强大的能力。在本节中,介绍了卷积的计算方法以及卷积神经网络的基本组件,并使用 PyTorch 构建了卷积神经网络以深入了解其工作原理。

盼小辉丶的博客 2万+

简述基于PyTorch框架的卷积神经网络(Convolutional Neural Network,CNN)

PyTorch框架使得构造和训练神经网络方便了许多,为简述其用法,同时也为说明卷积神经网络的原理,本文举例说明如何基于PyTorch框架构造并训练一个卷积神经网络用于识别手写阿拉伯数字。

XY的博客 8580

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

PyTorch可以说是三大主流框架中最适合初学者学习的了,相较于其他主流框架,PyTorch的简单易用性使其成为初学者们的首选。这样我想要强调的一点是,框架可以类比为编程语言,仅为我们实现项目效果的工具,也就是我们造车使用的轮子,我们重点需要的是理解如何使用Torch去实现功能而不要过度在意轮子是要怎么做出来的,那样会牵扯我们太多学习时间。以后就出一系列专门细解深度学习框架的文章,但是那是较后期我们对深度学习的理论知识和实践操作都比较熟悉才好开始学习,现阶段我们最需要的是学会如何使用这些工具。

master_hunter的博客 8936

CNN基础知识笔记

1. 卷积神经网络的概念 上世纪60年代,Hubel等人通过对猫视觉皮层细胞的研究,提出了感受野这个概念,到80年代,Fukushima在感受野概念的基础之上提出了神经认知机的概念,可以看作是卷积神经网络的第一个实现网络,神经认知机将一个视觉模式分解成许多子模式(特征),然后进入分层递阶式相连的特征平面进行处理,它试图将视觉系统模型化,使其能够在即使物体有位移或轻微变形的时候,也能完成识别。 卷积神经网络是多层感知机(MLP)的变种,由生物学家休博尔和维瑟尔在早期关于猫视觉皮层的研究发展而来,视觉皮层的

zxmyoung的博客 1万+

FairyGUI深度解析:Unity复杂UI开发的高效解决方案与性能优化

在Unity游戏和应用开发中,UI系统的性能与开发效率是核心挑战。原生UGUI的组件化模型在应对复杂、动态界面时,常面临Draw Call过高、层级管理臃肿的问题。其原理在于,每个UI元素对应一个GameObject,渲染合批受限于Transform层级与材质状态,易导致性能瓶颈。FairyGUI(FGUI)作为一种专业的第三方UI解决方案,其技术价值在于采用了截然不同的“舞台-显示对象”渲染模型。该模型通过内部轻量级对象管理与自主合批系统,实现了极高的运行时效率与Draw Call优化。在应用场景上,FG

weixin_31315567的博客 346

【最全】ISTQB- FL模拟题(含答案)

汇总收集的所有ISTQB基础级考题和答案

maoxuexue的博客 1万+

【深度学习】非常详细 | 用 Pytorch 理解卷积网络

在当今时代,机器在理解和识别图像中的特征和目标方面已经成功实现了99%的精度。我们每天都会看到这种情况-智能手机可以识别相机中的面部;使用Google图片搜索特定照片的能力;从条形码或书籍中扫描文本。借助卷积神经网络(CNN),这一切都是可能的,卷积神经网络是一种特定类型的神经网络,也称为卷积网络。如果您是一名深度学习爱好者,那么您可能已经听说过卷积神经网络,也许您甚至自己开发了一些图像分类器。像...

fengdu78的博客 526

告别偏色!手把手教你用i1Profiler 3.5为喷墨打印机制作专属ICC曲线(附D50/D65光源选择指南)

本文详细介绍了如何使用i1Profiler 3.5为喷墨打印机制作专属ICC曲线,解决设备偏色问题。从色彩管理基础、软件配置到色块打印与测量实战技巧,逐步指导用户完成曲线制作,并提供了D50/D65光源选择指南,确保色彩还原精准。适合摄影师和设计师提升打印质量。

weixin_30613343的博客 1万+

mlp神经网络_PyTorch可视化理解卷积神经网络

摘要: 神经网络工具像一个黑匣子,无法知道它的中间是如何处理的。本文使用图片加代码的形式讲解CNN网络,并对每层的输出进行可视化,便于初学者理解,可以动手实践下哦!如今,机器已经能够在理解、识别图像中的特征和对象等领域实现99%级别的准确率。生活中,我们每天都会运用到这一点,比如,智能手机拍照的时候能够识别脸部、在类似于谷歌搜图中搜索特定照片、从条形码扫描文本或扫描书籍等。造就机器能够获得在这些视...

weixin_39591916的博客 993

保姆级教程:用CameraX API快速搞定Android多摄像头切换与预览(附避坑指南)

本文提供了一份详细的CameraX API教程,帮助开发者快速实现Android多摄像头切换与预览功能。通过简化API设计和生命周期感知能力,CameraX大幅降低了开发复杂度,同时解决了多摄像头兼容性、预览优化等常见问题。文章包含完整代码示例和实战避坑指南,特别适合需要高效集成相机功能的Android开发者。

weixin_42699679的博客 167

Obsidian和Typora图片路径同步终极指南:告别混乱的assets文件夹

本文详细解析了Obsidian与Typora图片路径同步的终极解决方案,通过Custom Attachment Location插件实现动态路径管理,解决了两款工具间图片兼容性问题。文章提供了从基础配置到高级应用的完整指南,帮助用户告别混乱的assets文件夹,提升工作效率。

g9h0i1的博客 826

【收藏】用 Pytorch 理解卷积网络

原标题 |CONVOLUTIONAL NEURAL NETWORKS EXPLAINED: USING PYTORCH TO UNDERSTAND CNNS作 者 |Vihar K...

机器学习算法与Python学习 510

Visual Studio调试时遇到ntdll.dll的PDB文件缺失?别慌,这3个方法帮你搞定(附详细步骤)

本文详细解析了Visual Studio调试时ntdll.dll的PDB文件缺失问题,提供了3种实用解决方案:调整调试设置、配置符号服务器与缓存目录、手动下载管理符号文件。通过分步指导和高级技巧,帮助开发者快速恢复完整的调试功能,特别适用于Windows平台下的C++项目开发。

weixin_42537919的博客 516

非常详细 | 用 Pytorch 理解卷积网络

编辑:AI派在当今时代,机器在理解和识别图像中的特征和目标方面已经成功实现了99%的精度。我们每天都会看到这种情况-智能手机可以识别相机中的面部;使用Google图片搜索特定照片的能力;...

机器学习算法那些事 335

西南科技大学模拟电子技术实验二(二极管特性测试及其应用电路)预习报告

3、用二极管正向虚拟IV仪测出数据,并记录数据于虚表3和虚表4。1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,1、按照指导书multisim仿真软件上画出三种模型电路图,表6 二极管三种模型参数测试表(电源电压=1.2V)2、用万用表测出数据,并记录数据于虚表1和虚表2。2、用万用表测出数据,并记录数据于虚表5和虚表6。表5 二极管三种模型参数测试表(电源电压=12V)二极管三种模型参数测试表(电源电压=12V)

Welcome To My6n Blog 4084

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

通过Pytorch代码可视化理解卷积神经网络

本文代码地址:https://github.com/AINewHorizon/visualising-cnns机器在理解和识别图像中的特征和对象方面已经达到了99%的准确度。智能手机可以...

AI公园 1243

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

PyTorch可视化理解卷积神经网络

如今,机器已经能够在理解、识别图像中的特征和对象等领域实现99%级别的准确率。生活中,我们每天都会运用到这一点,比如,智能手机拍照的时候能够识别脸部、在类似于谷歌搜图中搜索特定照片、从条形码扫描文本或扫描书籍等。造就机器能够获得在这些视觉方面取得优异性能可能是源于一种特定类型的神经网络——卷积神经网络(CNN)。如果你是一个深度学习爱好者,你可能早已听说过这种神经网络,并且可能已经使用一些深度学习...

阿里云云栖号 4069

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

可视化卷积神经网络的过滤器_PyTorch可视化理解卷积神经网络

如今,机器已经能够在理解、识别图像中的特征和对象等领域实现99%级别的准确率。生活中,我们每天都会运用到这一点,比如,智能手机拍照的时候能够识别脸部、在类似于谷歌搜图中搜索特定照片、从条形码扫描文本或扫描书籍等。造就机器能够获得在这些视觉方面取得优异性能可能是源于一种特定类型的神经网络——卷积神经网络(CNN)。如果你是一个深度学习爱好者,你可能早已听说过这种神经网络,并且可能已经使用一些深度学习...

weixin_39993322的博客 980

卷积神经网络简单理解+pytorch实战操作

一 前言 卷积神经网络(CNN)可谓是深度学习网络的经典代表之一,吹牛的话就不多说了,我们直接说正事。其实学习过CNN的人都应该知道,其实CNN理解并不难,但是往往认为自己懂的时候,我觉得更应该多问自己一些理解模糊的问题,那这篇文章就是带领大家再大概了解一下CNN到底做了什么事,使得图像识别的准确率提高那么多。 二 CNN的基本操作 我们所了解到的神经网络模型,基本都可以认为,神经网络就是在自动...

zou_gr的博客 818
上一篇: 做程序员如何防止被裁员?我们既要干好主业,也要发展好副业,跟这些公众号大佬们向上生长...
下一篇: PPT分享 |《Python机器学习性能优化》实践
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值