分享

卷积神经网络-深度学习

 taotao_2016 2020-01-21

卷积神经网络(CNN)是一类深度神经网络。这是受人类大脑视觉皮层的启发。每当我们看到某些东西时,一系列的神经元皮层就会被激活,每层都会检测到一些特征,如线条,边缘(如垂直边缘,水平边缘)。

卷积神经网络-深度学习

CNN广泛用于 图像识别 , 图像分类,对象检测,人脸识别等。

过度简化图:

CNN的基本层: - C onvolution - Pooling - Flattening - Fully Connected Layer(Neural network)

卷积神经网络-深度学习

卷积神经网络

卷积神经网络-深度学习

示例

了解这一点的一些先决条件:

计算机将输入图像视为像素数组,这取决于图像的分辨率。根据图像分辨率,可以看到 h * w * d(h =高度,w =宽度,d =维度)。

彩色图像有 3个通道即 RGB,而黑/白图像只有 一个通道。例如,24*24* 3阵列的 RGB矩阵图像(3指RGB值)和一幅图像为4 * 4 * 1阵列的灰度矩阵(b / w)图像。

卷积神经网络-深度学习

现在让我们了解过滤器(卷积/特征图):

卷积神经网络-深度学习

要应用某些过滤器,我们需要将图像与过滤器矩阵相乘。以下是标准过滤器及其矩阵表示的一些示例。

过滤器的重要性:

在自动驾驶汽车的情况下,边缘检测过滤器非常重要。

现在我们已经准备好了解CNN层及其工作原理。

卷积层(Convolution Layer)

卷积是从输入图像中提取特征的第一层。这里我们将输入图像与不同的卷积(过滤器)相乘以获得具有提取特征的新图像。

例如:考虑一个6 * 6 * 3的图像,这里我们应用两个尺寸为3 * 3 * 3的不同过滤器,输出为4 * 4

卷积神经网络-深度学习

输出的公式:

  • 输入(Input): n * n * nc
  • 过滤器(Filter): f * f * nc
  • 填充(Padding): p (本文后面部分介绍)
  • 步幅(Stride): s

Stride是输入矩阵上的像素移位数。当步幅为1时,我们一次将过滤器移动到1个像素。当步幅为2时,我们一次将过滤器移动到2个像素,依此类推

  • 输出: [(n+2p-f)/s+1] *[(n+2p-f)/s+1] *nc'

例如:n = 6,p = 0,f = 3,s = 1,

[(6+(0*2)–3)/1+1]*[(6+(0*2)–3)/1+1]*3 = 4*4*3

nc是输入和过滤器中的通道数,而nc'是过滤器的数量。

工作说明:

卷积神经网络-深度学习

池化层(Pooling Layer)

当图像太大时,池化层会减少参数的数量。它减少了每个映射的维度,但保留了重要信息。空间池化(Spatial pooling )可以是不同类型的:

  • 最大池化
  • 均支池化
  • 求和池化

最大池化从调整过的特征映射中获取最大元素。采用最大元素也可以采用均值池化。将特征映射调用中的所有元素的和称为求和池化。

卷积神经网络-深度学习

最大池化

填充(padding)

填充在输入卷积的外部添加额外的0,以便卷积最终具有与输入相同数量的输出。如果我们不使用填充,则在每个卷积层之后,边界处的信息将丢失,这将减小卷积的大小以及性能。

类型:有效填充,相同填充。

在有效填充中,与输入相比,该特征的维度降低,而在相同填充中,维度增加或保持相同。

卷积神经网络-深度学习

零填充

展平(Flattening )

在应用了所有上述层后,我们得到矩阵形式的最终输出,但神经网络需要向量形式(1D)的输入数据,因此我们需要将我们的池化的特征映射展平成如下图所示的列。

卷积神经网络-深度学习

完全连接层(Fully connected Layer)(FC)

在这里,我们将展平数据提供给FC的输入层(例如 x1,x2 ...)。我们在中间层应用ReLU等激活函数。

这里基本的神经网络工作发生像反向传播,优化。

卷积神经网络-深度学习

激活函数:

在中间层中,优选ReLu,而对于输出层,则使用Softmax或sigmoid。

以下是部分代码展示:

Importing the Libraries and Packagesfrom keras.models import Sequentialfrom keras.layers import Convolution2Dfrom keras.layers import MaxPooling2Dfrom keras.layers import Flattenfrom keras.layers import Dense

卷积神经网络-深度学习

创建神经网络的第一步是使用keras中的顺序类初始化网络。

Initialising the CNNmodel = Sequential()Convolutional Layermodel.add(Convolution2D(filters = 32, kernel_size = (3, 3),input_shape = (64, 64, 3),activation = ‘relu’))

卷积神经网络-深度学习

池化层

model.add(MaxPooling2D(pool_size = (2, 2)))

卷积神经网络-深度学习

pool_size:池化窗口的形状。

展平层

model.add(Flatten())

完全连接的层

Adding the Hidden layermodel.add(Dense(units = 128, activation = ‘relu’))Adding the Output Layermodel.add(Dense(units = 1, activation = ‘sigmoid’))

卷积神经网络-深度学习

编译CNN

model.compile(optimiser = ‘adam’,loss = ‘binary_crossentropy’,metrics = [‘accuracy’])

卷积神经网络-深度学习

重要提示:

如果训练的数据非常少,那么我们可以通过应用缩放,翻转原始图像和创建新图像等操作从现有数据创建新数据。

Generating Image Datafrom keras.preprocessing.image import ImageDataGeneratortrain_datagen = ImageDataGenerator(rescale = 1./255,shear_range = 0.1,zoom_range = 0.2,horizontal_flip = True)test_datagen = ImageDataGenerator(rescale = 1./255)

卷积神经网络-深度学习

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多