一篇文章读懂什么是卷积神经网络

CNN在图像处理和视频处理领域有着广泛的应用。在这篇文章中,我将详细介绍卷积神经网络是如何进化的,以及为什么它们在图像领域如此出色。在此基础上,我们将建立一个使用Keras的卷积神经网络。

什么是卷积神经网络?

卷积神经网络与普通神经网络相似。它们也由神经元组成,学习权重和偏差。这些网络对图像最有效,它们以图像作为输入,然后在体系结构中编码某些属性。“卷积神经网络”表示该网络使用的数学运算称为卷积.

卷积实数参数的两个函数的运算。

这个运算在数学上叫做卷积。

在卷积神经网络术语中,卷积的第一个参数常被称为输入,第二个参数称为内核,其输出称为特征映射。现在我将向你展示如何在CNN中应用这个数学术语“卷积”。

CNN中卷积的工作原理

因此,如你所见,绿色的矩阵是输入(由输入图像的像素组成的矩阵),黄色的矩阵是核心。在这里,你可以看到内核矩阵是如何与输入矩阵进行转换的,从而给出了一个特征映射。你可以看到功能地图的尺寸发生了一些变化。

池化层

池化层主要用于连续卷积层之间。它用于减少表示的空间大小,减少参数的数量和网络的计算。池层独立地应用于输入的每个深度切片,并减少输入的空间维数。它主要用于减少过度拟合。如果我们在一个滤波器大小为2X2和步长为2的输入上应用一个最大池,那么它将在宽度和高度上将输入大小降低2倍,保持深度不受影响,这意味着它丢弃了75%的激活。下面是一个包含如何实现池层的图像。

正在此映像中实现MAX池

使用max池进行下采样的方法

现在我们将讨论计算输出层尺寸的公式。

输出特征映射维数的计算公式

在这个公式中,p和s分别是填充和步长。我们将一个接一个地讨论这件事的细节。

填充

填充用于在边缘周围添加额外的像素。实际上,填充是为了确保角落中的像素得到所需的注意。注意,我的意思是在卷积中,当核沿输入矩阵前进时,中间的像素在卷积运算中出现多次,而角点只涉及一次卷积运算,因此在卷积运算中得到了更多的权重。因此填充会在原始矩阵周围增加一层或更多的层,这样就可以考虑角点像素。

图中实现了零填充

跨步

在卷积神经网络中跨出是非常重要的。我将在这里讨论如何在两个图像的帮助下实现跨步,以使其清晰。

最大池(2个跨步)

使用更大步幅的一个主要原因是减少输出特征映射中的参数。现在我们准备好设计我们自己的CNN模型。我会详细解释CNN的内容。

卷积神经网络的设计

在这一部分中,我们将设计我们自己的卷积神经网络。CNN由卷积层、池层和末端完全连接层组成(对于多类问题,我们可以在结尾添加Softmax)。

我们将使用的架构如下图所示。我将使用Keras实现。因为我希望这篇文章是准确的,也许有一天我会从零开始编码一个CNN。现在,让我们进入架构。因此,我们将实现一个两层卷积神经网络,我已经使用了relu激活函数和最大池技术。有两个完全连接的层,最后是一个Softmax激活。

CNN架构

model=Sequential()model.add(Conv2D(32,kernel_size=(5,5),strides=(1,1),activation='relu',input_shape=input_shape))model.add(MaxPooling2D(pool_size=(2,2),strides=(2,2)))model.add(Conv2D(64,(5,5),activation='relu'))model.add(MaxPooling2D(pool_size=(2,2)))model.add(Flatten())model.add(Dense(1000,activation='relu'))model.add(Dense(num_classes,activation='softmax'))model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.SGD(lr=0.01),metrics=['accuracy'])model.fit(x_train,y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test,y_test),callbacks=[history])

在第一层,我们使用了32个大小为5X5的过滤器,具有步幅1和ReLU激活功能。接下来,我们添加了最大池池。在该层中,我们使用了64个大小为5X5的过滤器,然后是最大池化层。然后我们使用了一个平坦的层。之后,我们分别使用了具有ReLU和softmax激活的两个密集层。然后我们使用交叉熵作为我们的损失函数和随机梯度下降(SGD)来最小化损失。然后我们根据我们的用例训练模型。

参考资料-http://cs231n.github.io/understanding-cnn/

原文标题《Understanding Convolutional Neural Networks(CNNs)》

作者:Subham Tiwari

译者:lemon

本文为译文,不代表云加社区观点

—— 完 ——

关注云加社区,回复3加读者群

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181012A1MJJD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券