非常详细 | 用 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的博客 8579

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

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

master_hunter的博客 8935

CNN基础知识笔记

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

zxmyoung的博客 1万+

【生产实践】SSH服务弱加密算法修复指南(附完整操作流程)

SSH服务弱加密算法漏洞修复方案 检测发现SSH服务存在支持弱加密算法漏洞,主要风险包括: 使用arcfour、aes128-cbc等易被破解的算法 面临密钥恢复、重放攻击等安全威胁 提供两种修复方案: 推荐方案:升级OpenSSH至最新版本 替代方案:修改SSH配置禁用弱算法(需注意可能影响旧客户端连接) 修复步骤: 编辑/etc/ssh/sshd_config 注释或删除弱算法配置 添加强加密算法(如aes128-ctr等) 重启SSH服务 注意事项: 建议先在测试环境验证 可能需配合客户端升级 操作前

SunMy的博客 3100

Android PackageManagerService 总结(一)应用市场下载安装apk流程

前言: 本篇文章是对系统包安装流程的总结,基于Android12 上 com.android.packageinstaller 源码的分析,第三方应用商城(华为商城,小米商城,应用宝,豌豆荚,酷安等)下载安装应 用,在普通安装和静默安装app两种方式下,对代码流程的梳理和讲解。 触发安装: 当你在商城界面中点击安装按钮,应用会自动下载,下载完成后就会调起系统安装应用的界面,此种触发方式一般是通过Intent 隐式调用的,我们先阅读如下代码: ......

u012514113的专栏 1万+

用 Pytorch 理解卷积网络

点击上方“小白学视觉”,选择加&#34;星标&#34;或“置顶”重磅干货,第一时间送达 本文转自:人工智能与算法学习在当今时代,机器在理解和识别图像中的特征和目标方面已经成功实现了99%...

小白学视觉 318

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6658

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

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

fengdu78的博客 526

域控制器开发避坑实录:从硬件设计到软件集成的5个关键挑战

本文深入剖析了域控制器开发中的5大关键挑战,从硬件选型到软件集成,涵盖智能驾驶芯片选择、实时性优化、AUTOSAR架构适配等核心问题。通过实战案例和数据对比,为工程师提供避坑指南,助力提升开发效率和系统可靠性。

weixin_29258297的博客 395

在Ansys Mechanical中对磨损进行建模

在有限元分析中,磨损是通过移动接触表面上的节点来复制材料侵蚀来建模的。仿真迭代更新几何,并在每次更新后重新计算平衡,使过程成为非线性的。Ansys使用将压力、相对运动和材料阻力与表面损失联系起来的经验定律来处理连续介质尺度的磨损。要在Ansys Mechanical中激活磨损建模,必须使用TB,WEAR命令定义专用材料模型。该命令与 TBDATA 相结合,允许用户输入与磨损相关的材料常数,以控制磨损的计算方式以及在接触表面上的应用方式。

jkh920184196的博客 2629

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

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

机器学习算法与Python学习 507

STM32N6570-DK识别STLINK问题,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 2209

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

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

weixin_39591916的博客 993

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

如何选择深度强化学习算法:MuZero/SAC/PPO/TD3/DDPG/DQN/等算法

丨汀、的博客 5222

深度解读 ABAP CDS View 中的 @Analytics.dataCategory: #FACT 注解

注解在 ABAP CDS View 中具有重要意义。它不仅定义了当前视图在数据模型中的角色,还为后续的分析和报告奠定了基础。在实际开发中,通过合理使用这一注解,可以显著提升数据模型的可用性和系统性能。无论是简单的 KPI 展示还是复杂的多维分析,这一注解都能发挥关键作用。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 787

卷积神经网络构建的python基础-详细理解(Pytorch)

卷积神经网络的构建-详细理解(Pytorch)一、python中的类1、python构建一个简单的类2、python中的self3、python中的__init__方法4、python中的继承(1)继承父类中_ _init_ _()方法 一、python中的类     我们经常看见网络构建中包含如下结构 class simpleconv(nn.Module): def __init__(self, nclass): ...

hjkdh的博客 2902

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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

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

AI公园 1243

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

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

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

阿里云云栖号 4069

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

weixin_39993322的博客 980
上一篇: 【CNN】很详细的讲解什么以及为什么是卷积(Convolution)!
下一篇: 清晰易懂!有关 NumPy 和数据表达的可视化介绍
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值