理解卷积神经网络有困难

8

我从这里了解了卷积神经网络。然后我开始尝试使用torch7编程。我对CNN的卷积层感到困惑。

根据教程,

1

一层神经元只会与其前面的一个小区域连接,而不是以全连接的方式与所有神经元连接。

2

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

3

如果输入层是[32x32x3],CONV层将计算与输入中的局部区域相连的神经元的输出,每个神经元在其权重和与其连接到的输入体积的区域之间计算点积。这可能导致诸如[32x32x12]的体积。 我开始尝试使用CONV层对图像进行处理。我在torch7中实现了这个功能。这是我的实现:
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转换

  3
 512
 512
[torch.LongStorage of size 3]

  10
 508
 508
[torch.LongStorage of size 3]

现在让我们看一下CNN的结构。

CNN

所以,我的问题是:

问题1

卷积是否像这样进行 - 假设我们取一张32x32x3的图像。然后有一个5x5的滤波器。那么5x5的滤波器将通过整个32x32的图像并产生卷积图像?好的,所以滑动5x5的滤波器穿过整个图像,我们得到一个图像,如果有10个输出层,我们就得到10个图像(从输出中可以看出)。我们如何获得这些图像?(如果需要,请参见图像以了解更多信息)

enter image description here

问题2

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

如果是这样,那么第二点就没有任何意义了。根据那个 如果接受区域的大小为5x5,则卷积层中的每个神经元将具有与输入体积中的[5x5x3]区域的权重,总共为5*5*3 = 75权重。 那么这里的权重是什么?我非常困惑。在torch中定义的模型中没有权重。所以权重在这里起到了什么作用?

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

2个回答

10
「卷积是这样做的吗——比如说我们取一个32x32x3的图像,然后有一个5x5的滤波器。那么这个5x5的滤波器会经过整个32x32的图像,并产生卷积图像吗?」对于一个32x32x3的输入图像,一个5x5的滤波器会迭代每一个像素,并且对于每一个像素,它会查看5x5的邻域。这个邻域包含75个值。下面是一个示例图像,使用一个3x3的滤波器在单个输入通道上进行操作,即一个包含3x3x1个值的邻域(source)。」

convolution

对于每个邻居,滤波器将有一个参数(也称为权重),因此有75个参数。然后,为了计算单个输出值(像素x,y处的值),它会读取邻居的值,将每个值与相应的参数/权重相乘,并在最后将它们相加(参见离散卷积)。优化的权重必须在训练期间学习。

因此,一个滤波器将遍历图像并逐像素生成新的输出。如果您有多个滤波器(即SpatialConvolutionMM中的第二个参数>1),则会得到多个输出(torch中的“平面”)。

好的,所以在整个图像上滑动5x5的滤波器,我们得到一张图像,如果有10个输出层,我们就得到10张图像(从输出中可以看出)。我们如何获得这些呢?(如果需要,可以查看图片以澄清)

每个输出平面都由自己的滤波器生成。每个滤波器都有自己的参数(在您的例子中为5*5*3个参数)。对于多个滤波器,过程与单个滤波器完全相同。

“卷积层中神经元的数量是多少?它是输出层数量吗?在我上面编写的代码中,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个输入平面进行操作是很常见的)。 ”

如果想进一步了解,你可以查看http://neuralnetworksanddeeplearning.com/chap6.html。向下滚动到章节“介绍卷积网络”。在“局部感受野”下面,有一些可视化内容,可能会帮助你理解滤波器的作用(上面已经展示了一个)。


2
免责声明:下面提供的信息主要来自以下论文: 猫视皮层中的信息处理 应用于文档识别的基于梯度的学习 新皮质素 猫视皮层中的感受野
引用部分:
问题引用:“卷积是这样做的吗 - 假设我们拿一个32x32x3的图像。还有一个5x5的过滤器。然后5x5的过滤器将通过整个32x32图像并产生卷积图像?”
答复:“是的,一个5x5的过滤器将通过整个图像创建一个28x28的RGB图像。所谓的“特征映射”中的每个单元都接收到与输入图像中的一个5x5区域相连的5x5x3个输入(这个5x5邻域称为单元的“局部感受野”)。特征映射中相邻单元的感受野以前一层中相邻单元为中心。”
问题引用:“好的,所以在整个图像上滑动5x5的过滤器,我们得到一张图片,如果有10个输出层,我们得到10张图片(从输出中可以看出)。我们如何获得这些?(如果需要,可以查看图像以进行澄清)”
答复:“请注意,特征映射层上的单元共享相同的权重集,并对图像的不同部分执行相同的操作。(也就是说,如果您移动原始图像,则特征映射上的输出也将以相同的量移动)。也就是说,对于每个特征映射,您将约束权重集对于每个单元都是相同的;您只有5x5x3个未知权重。”
“由于这种约束,并且因为我们希望从图像中提取尽可能多的信息,我们添加更多的层,特征映射:具有多个特征映射可以帮助我们在每个像素处提取多个特征。”
“很遗憾我不熟悉Torch7。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接