当前位置: 首页 > 知识库问答 >
问题:

CNN输入层有多少个神经元?

鄢松
2023-03-14

在所有文献中,他们都说convnet的输入层是形状张量(宽度、高度、通道)。我知道一个完全连接的网络有一个输入层,其神经元数量与图像中的像素数量相同(考虑到灰度图像)。所以,我的问题是,卷积神经网络的输入层中有多少个神经元?下面的图片似乎有误导性(或者我理解错了),它说输入层有3个神经元。如果是,这3个神经元代表什么?它们是张量吗?根据我对CNN的理解,难道不应该只有一个大小的神经元(高度、宽度、通道)?如果我错了,请纠正我

共有2个答案

金子平
2023-03-14

首先,让我们把图像弄清楚。这张图片并没有说输入层中正好有3个神经元,它只是为了可视化。该图像显示了网络的总体架构,用任意数量的神经元表示每一层。

现在,要了解CNN,最好看看它们将如何处理图像。

图像是2D对象,在计算机中表示为2D矩阵,每个单元具有像素的强度值。图像可以有多个通道,例如,彩色图像的传统RGB通道。因此,可以将这些不同的通道视为图像中相同位置的不同维度的值(对于RGB,这些是颜色维度)。

另一方面,神经层是一维的。他们从一端获取输入,从另一端给出输出。那么,我们如何在一维神经层中处理二维图像呢?在这里,卷积神经网络(CNN)开始发挥作用。

可以通过在一个通道中连接连续的行,然后是连续的通道,将2D图像展平为单个1D向量。大小(宽度、高度、通道)的图像将成为大小(宽度x高度x通道)的1D向量,然后将其输入CNN的输入层。因此,为了回答您的问题,CNN的输入层具有与图像中所有通道的像素一样多的神经元。

我认为你对神经元的基本概念感到困惑:

根据我对CNN的理解,不应该只有一个大小(高度、宽度、通道)的神经元吗?

把神经元想象成一个单一的计算单元,它一次不能处理多个数字。因此,单个神经元无法同时处理图像的所有像素。由许多神经元组成的神经层用于处理整个图像。

希望这能消除你的一些疑虑。请随时在评论中提出任何疑问。:)

编辑:

假设我们有(27 X 27)图像。假设有3个过滤器,每个大小(3 X 3)。所以总共有3 X 3 X 3=27个参数(W)。所以我的问题是这些神经元是如何连接的?每个过滤器必须迭代超过27个像素(神经元)。所以一次,9个输入神经元连接到一个过滤器神经元。这些连接随着过滤器迭代所有像素而改变。

我的理解对吗?我只是想把CNN想象成具有连接的神经元。

可视化CNN过滤器的一个简单方法是将其想象为在图像中移动的小窗口。在您的情况下,您有3个大小为3x3的过滤器。

>

  • 我们通常使用多个过滤器,以便从同一个局部接受域(如michael_question_answerer恰当地所说)或更简单的术语,即我们的窗口中学习不同类型的特征。每个过滤器的权重都是随机初始化的,因此每个过滤器学习的特征略有不同。

    现在想象每个过滤器在图像上移动,一次只覆盖3x3网格。我们定义了一个步长值,该值指定窗口向右移动的幅度和向下移动的幅度。在每个位置,窗口处的过滤器权重和图像像素将在创建的新体积中给出一个新值。为了回答你的问题,在一个例子中,总共3x3=9个像素与对应于一个滤波器的9个神经元相连。其他2个过滤器也是如此。

    您通过可视化理解CNN的方法是正确的。但你仍然需要复习一下你对术语的基本理解。以下是一些有用的资源:http://cs231n.github.io/convolutional-networks/

    https://adeshpande3.github.io/A-Beginners-理解指南-卷积神经网络/

    希望这有帮助。保持好奇心:)

  • 龙俊德
    2023-03-14

    看来你误解了一些术语,也对卷积层有3个维度感到困惑。

    编辑:我应该明确指出,CNN的输入层是一个卷积层。

    任何一层的神经元数量都由开发者决定。对于完全连接的层,通常情况下,每个输入都有一个神经元。正如你在问题中提到的,对于一幅图像,完全连接的输入层中的神经元数量可能等于像素数量(除非开发人员想在某个点减少采样)。这也意味着您可以创建一个完全连接的输入层,该层将获取每个通道中的所有像素(宽度、高度、通道)。虽然每个输入只被一个输入神经元接收一次,但与卷积层不同。

    卷积层的工作方式略有不同。卷积层中的每个神经元都有一个我们称之为局部感受野的区域。这仅仅意味着神经元并没有连接到整个输入(这将被称为完全连接),而是连接到输入的某个部分(必须是空间局部的)。这些输入神经元提供了输入数据小部分的抽象,当将这些数据在整个输入中结合在一起时,我们称之为特征图。

    卷积层的一个重要特征是它们具有空间不变性。这意味着它们在整个图像中寻找相同的特征。毕竟,你不会希望一个受过物体识别训练的神经网络只在自行车位于图像左下角时才识别它!这是通过将局部感受野上的所有权重限制为相同来实现的。卷积层中覆盖整个输入并寻找一个特征的神经元称为滤波器。这些过滤器是二维的(它们覆盖整个图像)。

    然而,让整个卷积层只查找一个特性(例如一个角点)将极大地限制网络的容量。因此,开发人员添加了许多过滤器,以便该层可以在整个输入中查找许多功能。这个过滤器集合创建了一个三维卷积层。

    我希望这有帮助!

    编辑-使用op给出的示例来清除未解决的问题:

    OP的问题:假设我们有(27 X 27)个图像。假设有3个过滤器,每个大小(3 X 3)。因此总共有3 X 3 X 3=27个参数(W)。所以我的问题是这些神经元是如何连接的?每个过滤器必须迭代27个像素(神经元)。因此,每次有9个输入神经元连接到一个滤波神经元。当过滤器在所有像素上迭代时,这些连接会发生变化。

    答:首先,重要的是要注意到,感受野重叠是典型的(而且通常很重要)。因此,对于左上角神经元(神经元A)的3x3感受野的重叠/跨步,其右侧神经元(神经元B)的感受野也会有一个3x3感受野,其最左侧的3个连接可以接受与神经元A最右侧连接相同的输入。

    尽管如此,我认为您似乎希望将其可视化,因此如果没有重叠,我将坚持使用您的示例,并假设我们不希望图像周围有任何填充。如果有分辨率为27x27的图像,我们需要3个过滤器(这是我们的选择)。然后每个过滤器将有81个神经元(9x9 2D神经元网格)。每个神经元都有9个连接(对应于3x3感受野)。因为有3个过滤器,每个过滤器有81个神经元,所以我们有243个神经元。

    我希望这能澄清事情。我很清楚你对你的术语(层、过滤器、神经元、参数等)感到困惑。我建议你阅读一些博客以更好地理解这些东西,然后专注于CNN。祝你好运:)

     类似资料:
    • 我刚刚完成了ANN课程,开始学习CNN。我对CNN中的填充和跨步操作有基本的了解。 但在第一层神经元映射输入图像有困难,但我对人工神经网络中输入特征如何映射到第一层有基本的了解。 理解输入图像和第一conv层神经元之间映射的最佳方法是什么? 如何澄清我对以下代码示例的疑虑?代码取自Coursera的DL课程。 每个大小为4*4*3的8个过滤器如何处理大小为64*64*3的输入图像? 步幅=1,填充

    • 拥有大量输入的神经网络会导致我的网络出现如下问题 神经网络陷入困境,前馈计算总是给出1.0的输出,因为输出和太大,而在进行反向传播时,梯度和太高,导致学习速度太快。 神经网络在所有层中使用tanh作为主动函数。经过深思熟虑,我想出了以下解决方案: 初始化较小的随机权重值(WeightRandom/PreviousLayerNeuronCount) 或 我对自己提出的解决方案感到不舒服。 解决方案1

    • 参考这里. Common Layers For a neural network architecture to be considered a CNN, it requires at least one convolution layer (tf.nn.conv2d). There are practical uses for a single layer CNN (edge detection

    • 完全错误: 问题 我一直在努力建立一个神经网络,因为它不断抱怨收到的形状。x\u trian和y\u train的形状都是(20,)但当我将其输入为input\u形状时,它表示希望输入形状的值为20,但实际上收到了(None,1)。 我不明白(无,1)来自哪里,因为当我打印x_train和y_train的形状时,它给了我(20,)。它们都是数字数组。 代码 我试过的 然后我把input_shape

    • 问题是卷积神经网络的数学细节。假设网络的体系结构(其目标是图像分类)是这样的 输入图像32x32 第一个隐藏层3x28x28(由3个大小为5x5的滤波器卷积而成,步幅=0,无填充),随后是激活 池化层(在2x2区域上池化),产生3x14x14输出 第二隐藏层6x10x10(由6个大小为5x5的滤波器卷积而成,步幅=0,无填充),随后激活 池化层(在2x2区域上池化),产生6x5x5输出 具有100

    • 我有follow稠密函数,我正在努力理解它 下面的代码是指我的层中有10个节点,还是第一层中有28*28个节点。我问过一个朋友,他们说这意味着你有一个28*28的输入层,然后是一个有10个节点的隐藏层。