卷积神经网络

本文介绍了卷积神经网络(CNN)的基本概念,包括卷积运算、池化层的作用,以及如何使用Keras构建简单的CNN模型。CNN因其在处理图像任务上的优越性而被广泛应用,通过卷积层和池化层减少计算量并提取特征,最终通过全连接层和Softmax激活进行分类。文章还讨论了填充和步长在保持图像边缘信息和调整输出尺寸方面的重要性。
摘要由CSDN通过智能技术生成

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)来最小化损失。然后我们根据我们的用例训练。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值