我正在学习Convolutional Neural Network
,现在我对如何实现它感到困惑。
我了解常规神经网络和Gradient Descent
和Back Propagation
等概念,我可以理解CNN是如何直观地运作的。
我的问题是关于CNN的反向传播。怎么回事?最后完全连接的层是常规神经网络,没有问题。但我如何更新卷积层中的滤镜?我怎样才能将完全连接层的错误传播到这些过滤器?我的问题是更新过滤器!
过滤器只是简单的矩阵?或者他们有像常规NN的结构,层之间的连接模拟这种能力?我读到了Sparse Connectivity
和Shared Weights
但我无法将它们与CNN联系起来。我真的很困惑实施CNN,我找不到任何谈论这些概念的教程。我不能读论文,因为我是这些东西的新手,我的数学并不好。
我不想使用TensorFlow
或类似这样的工具,我正在学习主要概念并使用纯Python
。
答案 0 :(得分:0)
首先,我可以向CNN推荐this。也许你可以用这个来更好地理解它。
简要回答一些问题:
我们假设您想使用CNN进行图像分类。图片由NxM像素组成,有3个通道(RBG)。要在其上应用卷积图层,请使用过滤器。滤波器是(通常但不一定)二次形状(例如PxP)的矩阵,以及与其所应用的表示的信道数相等的多个信道。因此,第一个Conv层滤波器也有3个通道。通道是过滤器的层数,可以这么说。
将过滤器应用于图片时,您会执行称为离散卷积的操作。您将过滤器(通常小于图像)并逐步将其滑过图片,然后计算卷积。这基本上是矩阵乘法。然后在其上应用激活功能,甚至可以应用池化层。需要注意的重要一点是,此层上所有已执行卷积的滤波器保持不变,因此每层只有P * P参数。您以某种方式调整过滤器,以便尽可能地适合训练数据。这就是为什么它的参数被称为共享权重。应用GD时,您只需将其应用于所述滤镜权重即可。
另外,你可以找到一个很好的演绎here。
实现这些东西当然是可能的,但是对于初学者来说,你可以尝试使用tensorflow进行实验。至少这是我学习新概念的方式:)