引言: CNN解释器是 CNN可视化的工具,对于小白而言,CNN可视化对于理解CNN有非常的帮助,因此,花了几天的时间,将CNN解释器网站做了一个翻译,还包括安装CNN解释器的过程和相关资料。
CNN解释器地址:CNN Explainer CNN Explainer (poloclub.github.io)

CNN解释器文献:CNN Explainer: Learning Convolutional Neural Networks with Interactive Visualization

torch中CNN可视化中间层特征 cnn可视化网站_深度学习

https://arxiv.org/abs/2004.15004

CNN github地址:https://github.com/poloclub/cnn-explainer

CNN解释器安装:https://zhuanlan.zhihu.com/p/141537738 
在bi站上看到的安装后界面和CNN解释器地址一样,本地安装的时候出现一些问题,因此建议直接在CNN解释器地址学习即可

cnn解释器官网主要分为两部分,第一,对于CNN做一个简单的介绍,以及一些概念,如张量,神经元,层,卷积核等,第二部分介绍CNN每一层的结构,输入层,卷积层,激励层,池化层和展平层,以及每一层的结构做了可视化的展示,超参数如步长,填充,及核大小等做了简单的介绍,对于理解CNN相关概念非常有帮助。

torch中CNN可视化中间层特征 cnn可视化网站_卷积_02

CNN解释器:

深度学习的巨大成功激励了许多从业者和学生学习这项令人兴奋的技术。然而,由于理解和应用深度学习的复杂性,初学者迈出第一步往往具有挑战性。我们介绍CNN Explainer,这是一种交互式可视化工具,专为非专家学习和检查卷积神经网络(CNN)而设计,卷积神经网络是一种基本的深度学习模型架构。我们的工具解决了新手在学习 CNN 时面临的主要挑战,我们从对教师的访谈和对过去学生的调查中确定了这些挑战。CNN Explainer 紧密集成了总结 CNN 结构的模型概述,以及可帮助用户了解 CNN 底层组件的按需动态可视化解释视图。通过跨抽象级别的平滑转换,我们的工具使用户能够检查低级数学运算和高级模型结构之间的相互作用。一项定性用户研究表明,CNN Explainer可以帮助用户更轻松地理解CNN的内部工作原理,并且使用起来引人入胜且令人愉快。我们还从我们的研究中得出设计经验。CNN Explainer使用现代Web技术开发,可在用户的Web浏览器中本地运行,无需安装或专用硬件,从而扩大了公众对现代深度学习技术的教育访问。

什么是卷积神经网络

在机器学习中,分类器将类标签分配给数据点。 例如,图像分类器为图像中存在的对象生成类标签(例如,鸟、飞机)。 卷积神经网络,简称CNN,是一种分类器,擅长解决这个问题!

CNN 是一种神经网络:一种用于识别数据模式的算法。 神经网络通常由按层组织的一组神经元组成,每个神经元都有自己的可学习权重和偏差。 让我们将 CNN 分解为其基本构建块。

张量,可以被认为是一个 n 维矩阵。 在上面的 CNN 中,除输出层外,张量将是 3 维的。
神经元,可以被认为是一个接受多个输入并产生单个输出的函数。 神经元的输出在上面表示为红色→蓝色激活图。
层,是具有相同操作的神经元集合,包括相同的超参数。
内核权重和偏差,对于每个神经元而言,核权重和偏差是独一无二的,但在训练阶段进行了调整,并允许分类器适应所提供的问题和数据集。 它们在可视化教程中中使用黄色→绿色发散色标进行编码。 通过单击神经元或将鼠标悬停在卷积弹性解释视图中的内核/偏差上,可以在交互式公式视图中查看特定值。
CNN 传达了一个可微分函数,它在输出层的可视化中表示为类分数。
如果您之前研究过神经网络,这些术语对您来说可能听起来很熟悉。 那么是什么让 CNN 与众不同呢? CNN 使用一种特殊类型的层, 即卷积层,这使它们能够很好地从图像和类图像数据中学习。 关于图像数据,CNN 可用于许多不同的计算机视觉任务,例如 image processing, classification, segmentation, and object detection.

    在 CNN Explainer 中,您可以看到如何使用简单的 CNN 进行图像分类。 由于网络的简单性,它的性能并不完美,但没关系! CNN Explainer 中使用的网络架构  Tiny VGG包含许多与当今最先进的 CNN 中使用的层和操作相同的层和操作,但规模较小。 这样入门会更容易理解。

网络的每一层都做什么?
让我们来看看网络中的每一层。 在阅读时,通过单击并将鼠标悬停在上面的可视化的各个部分,随意与上面的可视化进行交互。

输入层

   输入层(最左边的层)代表进入 CNN 的输入图像。 因为我们使用RGB图像作为输入,所以输入层有3个通道,分别对应红、绿、蓝通道,如图所示。 当您单击上面的网络详细信息图标图标时,使用色阶显示详细信息(在此图层和其他图层上)。

torch中CNN可视化中间层特征 cnn可视化网站_深度学习_03

 

卷积层  

torch中CNN可视化中间层特征 cnn可视化网站_池化_04


卷积层是 CNN 的基础,因为它们包含学习的内核(权重),它提取区分不同图像的特征——这就是我们为什么将其成为分类器的原因!当您与卷积层交互时,您会注意到前一层和卷积层之间的链接。每个链接代表一个唯一的内核,用于卷积运算以产生当前卷积神经元的输出或激活图。

 

卷积神经元使用独特的内核和前一层相应神经元的输出执行逐元素点积(即互相关运算)。这将产生与唯一内核一样多的中间结果。卷积神经元是所有中间结果与学习偏差相加的结果。

例如,让我们看一下上面 Tiny VGG 架构中的第一个卷积层。请注意,这一层有 10 个神经元,但前一层只有 3 个神经元。在 Tiny VGG 架构中,卷积层是全连接的,这意味着每个神经元都连接到前一层中的每个其他神经元。关注来自第一个卷积层的最顶层卷积神经元的输出,当我们将鼠标悬停在激活图上时,我们看到有 3 个独特的内核。

torch中CNN可视化中间层特征 cnn可视化网站_torch中CNN可视化中间层特征_05

 

图1:当您将鼠标悬停在第一个卷积层最顶层节点的激活图上时,您可以看到应用了 3 个内核来生成此激活图。 单击此激活图后,您可以看到每个唯一内核发生的卷积操作。图片所选择的偏差为:0.0842

这些内核的大小是网络架构设计者指定的超参数。 为了产生卷积神经元的输出(激活图),我们必须使用前一层的输出和网络学习到的唯一内核执行元素点积。 在 TinyVGG 中,点积操作使用的步长为 1,这意味着内核每个点积移动 1 个像素以上,但这是网络架构设计者可以调整以更好地适应他们的数据集的超参数。 我们必须对所有 3 个内核执行此操作,这将产生 3 个中间结果。

torch中CNN可视化中间层特征 cnn可视化网站_卷积_06

 做完卷积处理之后,激励层采用RULU函数,

torch中CNN可视化中间层特征 cnn可视化网站_池化_07

 

torch中CNN可视化中间层特征 cnn可视化网站_卷积_08

 

然后,执行包含所有 3 个中间结果以及网络学习的偏差的元素求和。 在此之后,生成的二维张量将是上面界面上第一个卷积层中最顶层神经元的激活图。 必须应用相同的操作来生成每个神经元的激活图。

通过一些简单的数学运算,我们能够推断出有 3 x 10 = 30 个独特的内核,每个内核的大小为 3x3,应用于第一个卷积层。 卷积层和前一层之间的连通性是构建网络架构时的一个设计决策,它会影响每个卷积层的内核数。 在可视化周围单击以更好地了解卷积层背后的操作。按照上面的例子,自己尝试一下!

了解超参数

torch中CNN可视化中间层特征 cnn可视化网站_激活函数_09

 

填充padding 当内核扩展到激活图之外时,通常需要填充。填充可以在激活图的边界保存数据,从而提高性能,并且可以帮助保留输入的空间大小,从而允许架构设计人员构建更简单、性能更高的网络。存在许多填充技术,但最常用的方法是零填充,因为它的性能、简单性和计算效率。该技术涉及在输入的边缘周围对称地添加零。这种方法被许多高性能 CNN 所采用,例如 AlexNet。

内核大小 kernel size,通常也称为过滤器大小,是指输入上滑动窗口的尺寸。选择这个超参数对图像分类任务有巨大的影响。例如,较小的内核尺寸能够从输入中提取包含高度局部特征的大量信息。正如您在上面的可视化中所看到的,较小的内核大小也会导致层维度的减少较小,从而实现更深层次的架构。相反,较大的内核大小提取的信息较少,这会导致层维度的减少更快,通常会导致性能变差。大内核更适合提取更大的特征。归根结底,选择合适的内核大小将取决于您的任务和数据集,但通常,较小的内核大小会为图像分类任务带来更好的性能,因为架构设计师能够将越来越多的层堆叠在一起以学习越来越复杂的功能!

步幅 Stride表示内核应该一次移动多少像素。例如,如上面卷积层示例中所述,Tiny VGG 对其卷积层使用步幅为 1,这意味着在输入的 3x3 窗口上执行内积以产生输出值,然后移至每个后续操作都正确一个像素。步幅对 CNN 的影响类似于内核大小。随着步幅的减小,因为提取了更多的数据,所以学习了更多的特征,这也导致了更大的输出层。相反,随着步幅的增加,这会导致更有限的特征提取和更小的输出层尺寸。架构设计师的职责之一是确保内核在实现 CNN 时对称地滑过输入。使用上面的超参数可视化来改变各种输入/内核维度的步幅来理解这个约束!

激活函数

ReLU

神经网络在现代技术中非常普遍——因为它们非常准确! 当今性能最高的 CNN 由数量惊人的层组成,这些层能够学习越来越多的特征。 这些开创性的 CNN 能够实现如此巨大的准确性,部分原因在于它们的非线性。 ReLU 将急需的非线性应用到模型中。 非线性是产生非线性决策边界所必需的,因此输出不能写为输入的线性组合。 如果不存在非线性激活函数,深度 CNN 架构将演变为单个等效的卷积层,其性能几乎不会如此。 ReLU 激活函数专门用作非线性激活函数,与 Sigmoid 等其他非线性函数相反,因为根据经验观察到,使用 ReLU 的 CNN 比对应的 CNN 训练速度更快。

ReLU 激活函数是一对一的数学运算:

torch中CNN可视化中间层特征 cnn可视化网站_深度学习_10

此激活函数逐元素应用于输入张量的每个值。 例如,如果对值 2.24 应用 ReLU,结果将是 2.24,因为 2.24 大于 0。您可以通过单击上面网络中的 ReLU 神经元来观察如何应用此激活函数。 整流线性激活函数 (ReLU) 在上述网络架构中的每个卷积层之后执行。 注意这一层对整个网络中各种神经元的激活图的影响!

Softmax

torch中CNN可视化中间层特征 cnn可视化网站_池化_11

 

torch中CNN可视化中间层特征 cnn可视化网站_torch中CNN可视化中间层特征_12

 

softmax 操作有一个关键目的:确保 CNN 输出总和为 1。因此,softmax 操作可用于将模型输出缩放为概率。单击最后一层会显示网络中的 softmax 操作。请注意展平后的 logits 没有在 0 到 1 之间缩放。为了直观地指示每个 logit(未缩放的标量值)的影响,它们使用浅橙色 → 深橙色色标进行编码。通过 softmax 函数后,现在每个类对应一个合适的概率!

您可能在想标准归一化和 softmax 之间的区别是什么——毕竟,两者都在 0 和 1 之间重新调整对数。请记住,反向传播是训练神经网络的一个关键方面——我们希望正确的答案具有最大的“信号”。 ”通过使用 softmax,我们有效地“逼近”了 argmax,同时获得了可微性。 Rescaling 的 max 权重并没有明显高于其他 logits,而 softmax 确实如此。简单地说,softmax 是一个“更平滑”的 argmax——看看我们在那里做了什么

torch中CNN可视化中间层特征 cnn可视化网站_卷积_13

 图4  Softmax 交互式公式视图允许用户与颜色编码的 logits 和公式进行交互,以了解扁平层后的预测分数如何归一化以产生分类分数。

池化层

torch中CNN可视化中间层特征 cnn可视化网站_深度学习_14

 

不同的 CNN 架构中的池化层类型很多,但它们的目的都是逐渐减小网络的空间范围,从而减少网络的参数和整体计算量。 上述 Tiny VGG 架构中使用的池化类型是 Max-Pooling。

Max-Pooling 操作需要在架构设计期间选择内核大小和步长。 选择后,该操作会在输入上滑动具有指定步长的内核,同时仅从输入中选择每个内核切片的最大值以生成输出值。 这个过程可以通过点击上面网络中的一个池化神经元来查看。

在上面的 Tiny VGG 架构中,池化层使用 2x2 内核和 2 步长。具有这些规范的此操作导致丢弃 75% 的激活。 通过丢弃如此多的值,Tiny VGG 的计算效率更高并避免了过度拟合。

torch中CNN可视化中间层特征 cnn可视化网站_torch中CNN可视化中间层特征_15

展平层

torch中CNN可视化中间层特征 cnn可视化网站_激活函数_16

该层将网络中的一个三维层转换为一维向量,以拟合全连接层的输入进行分类。 例如,一个 5x5x2 的张量将被转换为一个大小为 50 的向量。网络的先前卷积层从输入图像中提取特征,但现在是对特征进行分类的时候了。 我们使用 softmax 函数对这些特征进行分类,这需要一维输入。 这就是为什么展平层是必要的。 可以通过单击任何输出类来查看该图层。

torch中CNN可视化中间层特征 cnn可视化网站_卷积_13

 文献主演要介绍了四个方面的内容,介绍,CNN组成,CNN应用,和结论,在这里我主要介绍CNN组成部分,并结合CNN解释器来说明,其他部分建议看原文。(大概对原理部分做了翻译,但是感觉讲的不是很好,可以算成是对于CNN解释器的一个补充。)

论文简介:

Applications of Convolutional Neural Networks

摘要:近年来,深度学习被用于 广泛应用于很多领域。在深度学习中, 发现卷积神经网络提供了解决现实世界问题的准确结果。在本文中, 我们全面总结了在计算机视觉和自然语言处理方面CNN的应用 。我们描述 CNN 如何用于计算机视觉,主要用于人脸 识别、场景标注、图像分类、动作识别、人体姿态估计和文档分析。 此外,我们描述了 CNN 在语音领域的应用 自然语言的识别和文本分类 加工。我们将 CNN 与其他方法进行比较来解决 同样的问题并解释为什么 CNN 比其他的好方法。

CNN 架构概览:

CNN架构不同于传统的多层感知器 (MLP) 以确保一定程度的偏移和失真不变性[16]。 他们结合了三个结构做同样的想法:

1.局部感受野

2.共享权重

3.空间和时间子采样

我们在文章中提到了许多 CNN 架构,但它们的基本组成部分非常相似。 让我们考虑典型的卷积网络架构识别图1中的字符。

torch中CNN可视化中间层特征 cnn可视化网站_卷积_18

卷积网络是可训练的多阶段架构,每个阶段由多个层组成。 每个阶段的输入和输出都是称为特征映射的数组集。 在彩色图像的情况下,每个特征图将是一个 2D 数组,包含输入图像的颜色通道、视频的 3D 数组和音频输入的一维数组。 输出阶段表示从输入的所有位置提取的特征。 每个阶段一般由卷积层、非线性层和池化层组成。 在几个卷积和池化层之后存在一个或多个完全连接的层。

A 卷积层

这一层是 CNN 的核心构建块。 这层的参数由可学习的内核或过滤器组成它延伸到输入的整个深度。 每个单元该层的一组单元接收输入前一层的小邻域。 这样一个邻域称为神经元的感受野上一层。 在前向传递期间,每个过滤器是与生成地图的输入进行卷积。 什么时候从一个生成的多个这样的特征图多个过滤器堆叠在一起,它们形成了卷积层。 生成权重向量特征图是共享的,这降低了模型的复杂性。

B 非线性层

这是一层应用各种激活函数的神经元。 这些函数引入了多层网络所需要的非线性。 激活函数通常是 sigmoid、tanh 和 ReLU。 与其他函数相比,整流线性单元 (ReLU) [17] 更可取,因为神经网络需要多次训练

快点。

C 池化层

卷积层后面可能是池化层从小矩形块中取出卷积层并对其进行子采样以生成单个块 [19-21] 的最大输出。 池化层逐渐减少表示的空间大小,从而减少要计算的参数。 它也是控制过拟合。 除最大值外的池化单位函数还可以执行其他函数,如平均值 [18]或 L2 范数池化。

D 全连接层

可能有一个或多个全连接层通过获取所有神经元来执行高级推理,上一层并将它们连接到每个神经元在当前层生成全局语义信息。

总结:

CNN解释器本来是作为cnn学习后的实战项目,现在看来适合于做辅助学习的资料,CNN的实战项目可以看动手学深度学习系列,动手学深度学习系列 -CNNDive-into-DL-PyTorch

问题; 在有些层做RELU时,明显数值大于0,结果显示为0,这和RELU函数不一致,这是为什么呢?如下图,0.59大于0,最后输出为0,

torch中CNN可视化中间层特征 cnn可视化网站_torch中CNN可视化中间层特征_19

负值 红色 正值 蓝色

torch中CNN可视化中间层特征 cnn可视化网站_卷积_20

原因在于方框中负数和正数的颜色不一样,所以结果不一样。