Machine learning 难以理解卷积神经网络

Machine learning 难以理解卷积神经网络,machine-learning,computer-vision,neural-network,torch,conv-neural-network,Machine Learning,Computer Vision,Neural Network,Torch,Conv Neural Network,我从一本书上读到了卷积神经网络。然后我开始玩火炬7。我对CNN的卷积层感到困惑 从教程中 1. 一层中的神经元将只连接到它之前的一个小区域,而不是以完全连接的方式连接到所有神经元。 2. 例如,假设输入卷的大小为[32x32x3],(例如,RGB CIFAR-10图像)。如果感受野大小为5x5,则Conv层中的每个神经元将对输入体积中的[5x5x3]区域具有权重,总权重为5*5*3=75。 3. 如果输入层为[32x32x3],CONV层将计算连接到输入中局部区域的神经元的输出,每个神经元计算它

我从一本书上读到了卷积神经网络。然后我开始玩火炬7。我对CNN的卷积层感到困惑

从教程中

1.
一层中的神经元将只连接到它之前的一个小区域,而不是以完全连接的方式连接到所有神经元。

2.
例如,假设输入卷的大小为[32x32x3],(例如,RGB CIFAR-10图像)。如果感受野大小为5x5,则Conv层中的每个神经元将对输入体积中的[5x5x3]区域具有权重,总权重为5*5*3=75。

3. 如果输入层为[32x32x3],
CONV层将计算连接到输入中局部区域的神经元的输出,每个神经元计算它们的权重和它们在输入体积中连接到的区域之间的点积。这可能会产生[32x32x12]这样的音量。

我开始研究CONV层对图像的作用。我是在火炬7上做的。这是我的实现,

require 'image'
require 'nn'

i = image.lena()

model = nn.Sequential()
model:add(nn.SpatialConvolutionMM(3, 10, 5, 5)) --depth = 3, #output layer = 10, filter = 5x5

res = model:forward(i)
itorch.image(res)
print(#i)
print(#res)
输出

现在让我们看看CNN的结构

所以,我的问题是

问题1 卷积是这样做的——假设我们拍摄了一张32x32x3的图像。还有一个5x5过滤器。然后5x5滤波器将通过整个32x32图像并产生卷积图像?好的,在整个图像上滑动5x5过滤器,我们得到一个图像,如果有10个输出层,我们得到10个图像(如您从输出中看到的)。我们如何得到这些?(如有需要,请参见图片以了解说明)

问题2 conv层的神经元数量是多少?是输出层的数量吗?在我上面写的代码中,
model:add(nn.SpatialConvolutionMM(3,10,5,5))
。是10点吗?(输出层的数量?)

如果是这样,那么第2点就没有任何意义了。根据这个
如果感受野的大小为5x5,那么Conv层中的每个神经元将在输入体积中的[5x5x3]区域具有权重,总共5*5*3=75个权重。
那么这里的权重是多少?我对此感到非常困惑。在torch中定义的模型中,没有权重。那么重量是如何在这里起作用的呢

有人能解释一下发生了什么事吗

卷积是这样做的——假设我们拍摄了一张32x32x3的图像。还有一个5x5过滤器。然后5x5滤波器将通过整个32x32图像并产生卷积图像

对于32x32x3输入图像,5x5过滤器将迭代每个像素,并针对每个像素查看5x5邻域。该邻域包含5*5*3=75个值。下面是单个输入通道上3x3滤波器的示例图像,即具有3*3*1值邻域的输入通道()

对于每个单独的邻居,过滤器将有一个参数(也称为权重),因此有75个参数。然后,为了计算一个单独的输出值(像素x,y处的值),它读取这些相邻值,将每个值与相应的参数/权重相乘,并在最后将它们相加(请参阅)。在训练过程中必须学习最佳权重

因此,一个过滤器将在图像上迭代并逐像素生成新的输出。如果您有多个过滤器(即
SpatialConvolutionMM
中的第二个参数大于1),您将获得多个输出(“torch中的平面”)

好的,在整个图像上滑动5x5过滤器,我们得到一个图像,如果有10个输出层,我们得到10个图像(如您从输出中看到的)。我们如何得到这些?(如有需要,请参见图片以了解说明)

每个输出平面由其自己的过滤器生成。每个过滤器都有自己的参数(示例中为5*5*3个参数)。多个过滤器的过程与一个过滤器的过程完全相同

conv层的神经元数量是多少?是输出层的数量吗?在我上面编写的代码中,model:add(nn.SpatialConvolutionMM(3,10,5,5))。是10点吗?(输出层的数量?)

你应该称它们为权重或参数,“神经元”并不真正适合于卷积层。如前所述,在您的示例中,每个过滤器的参数数为5*5*3=75。由于有10个过滤器(“输出平面”),所以总共有750个参数。如果使用
model:add(nn.SpatialConvolutionMM(10,10,5,5))
向网络添加第二层,则每个过滤器将有额外的5*5*10=250个参数,总计250*10=2500个。请注意这个数字是如何快速增长的(一层中512个过滤器/输出平面在256个输入平面上运行并不少见)

要进一步阅读,请参阅。向下滚动到“介绍卷积网络”一章。在“局部感受野”下,有一些可视化信息可能会帮助您了解过滤器的功能(上图所示)。

免责声明: 我提供的以下信息主要摘自以下文件: 猫视皮层的信息处理 基于梯度的学习在文档识别中的应用 新科尔蒂根 猫视觉皮层的感受野

卷积是这样做的——假设我们拍摄了一张32x32x3的图像。还有一个5x5过滤器。然后5x5滤波器将通过整个32x32图像并产生卷积图像

是的,5x5过滤器将通过整个图像创建一个28x28 RGB图像。所谓“特征图”中的每个单元接收5x5x3输入,该输入连接到输入图像中的5x5区域(该5x5邻域称为单元的“局部感受野”)。特征图中相邻(相邻)单位的感受野集中在前一层的相邻(相邻)单位上

好的,在整个图像上滑动5x5过滤器,我们得到一个图像,如果有10个输出层,我们得到10个图像(如您从输出中看到的)。我们如何得到这些?(如有需要,请参见图片以了解说明)

请注意,uni
  3
 512
 512
[torch.LongStorage of size 3]

  10
 508
 508
[torch.LongStorage of size 3]