前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >带你了解什么是卷积神经网络

带你了解什么是卷积神经网络

作者头像
liuxuewen
修改2018-09-25 10:41:15
1.3K0
修改2018-09-25 10:41:15
举报
文章被收录于专栏:技术翻译技术翻译

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

什么是卷积神经网络?

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

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

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

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

CNN中卷积的工作原理
CNN中卷积的工作原理

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

池化层

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

正在此映像中实现MAX池
正在此映像中实现MAX池
使用max池进行下采样的方法
使用max池进行下采样的方法

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

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

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

填充

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

图中实现了零填充
图中实现了零填充

跨步

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

最大池(2个跨步)
最大池(2个跨步)

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

卷积神经网络的设计

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

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

CNN架构

代码语言:javascript
复制
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

不代表云加社区观点,更多详情请查看原文链接

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是卷积神经网络?
  • 池化层
  • 填充
  • 卷积神经网络的设计
相关产品与服务
媒体处理
媒体处理(Media Processing Service,MPS)是一种云端音视频处理服务。基于腾讯多年音视频领域的深耕,为您提供极致的编码能力,大幅节约存储及带宽成本、实现全平台播放,同时提供视频截图、音视频增强、内容理解、内容审核等能力,满足您在各种场景下对视频的处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档