我从这里阅读了关于卷积神经网络的内容。然后我开始使用torch7进行尝试。我对CNN的卷积层感到困惑。
根据教程,
1
层中的神经元只会连接到它前一层的局部区域,而不是以全连接的方式连接到所有神经元。
2
例如,假设输入体的大小为[32x32x3],(例如一个RGB的CIFAR-10图像)。如果感受野的大小为5x5,那么卷积层中的每个神经元将与输入体中的[5x5x3]区域有权重连接,总共5*5*3 = 75个权重。
3
如果输入层是[32x32x3],卷积层将计算连接到输入中局部区域的神经元的输出,每个神经元计算其权重与其在输入体中连接的区域之间的点积。这可能会产生如[32x32x12]这样的体积。
我开始尝试卷积层对图像可能产生的影响。我在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 = 5x5res = model:forward(i)itorch.image(res)print(#i)print(#res)
3 512 512[torch.LongStorage of size 3] 10 508 508[torch.LongStorage of size 3]
现在让我们看看CNN的结构
所以,我的疑问是,
问题1
卷积是像这样进行的吗 – 假设我们有一个32x32x3的图像。还有一个5×5的滤波器。那么5×5的滤波器会穿过整个32×32的图像并生成卷积后的图像?好的,所以在整个图像上滑动5×5的滤波器,我们得到一张图像,如果有10个输出层,我们会得到10张图像(如输出所示)。我们是如何得到这些的?(如有需要,请查看图像以获取澄清)
问题2
卷积层中的神经元数量是多少?它是输出层的数量吗?在我上面写的代码中,model:add(nn.SpatialConvolutionMM(3, 10, 5, 5))
。是10吗?(输出层的数量?)
如果是这样的话,第2点就没有任何意义。根据那一点,如果感受野的大小为5x5,那么卷积层中的每个神经元将与输入体中的[5x5x3]区域有权重连接,总共5*5*3 = 75个权重。
那么这里的权重是什么?我对此非常困惑。在torch中定义的模型中没有权重。那么权重在这里是如何起作用的?
有人能解释一下这是怎么回事吗?
回答:
卷积是像这样进行的吗 – 假设我们有一个32x32x3的图像。还有一个5×5的滤波器。那么5×5的滤波器会穿过整个32×32的图像并生成卷积后的图像?
对于一个32x32x3的输入图像,一个5×5的滤波器会遍历每一个像素,并对每个像素查看其5×5的邻域。该邻域包含5*5*3=75个值。下面是一个3×3滤波器在单一输入通道上的示例图像,即一个具有3*3*1值的邻域(来源)。
对于每个单独的邻居,滤波器将有一个参数(也称为权重),因此有75个参数。然后,为了计算一个单一的输出值(像素x,y处的值),它读取这些邻居值,将每个值与相应的参数/权重相乘,并在最后将这些值相加(参见离散卷积)。最佳权重需要在训练过程中学习。
因此,一个滤波器将遍历图像并逐像素生成一个新的输出。如果你有多个滤波器(即SpatialConvolutionMM
中的第二个参数大于1),你会得到多个输出(在torch中称为“平面”)。
好的,所以在整个图像上滑动5×5的滤波器,我们得到一张图像,如果有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。向下滚动到“Introducing convolutional networks”章节。在“Local receptive fields”下有可视化内容,这可能会帮助你理解滤波器的作用(上面展示了一个)。