欢迎访问 生活随笔!

凯发k8官方网

当前位置: 凯发k8官方网 > 人工智能 > 卷积神经网络 >内容正文

卷积神经网络

tensorflow学习笔记之五(卷积神经网络) -凯发k8官方网

发布时间:2024/9/30 卷积神经网络 18 豆豆
凯发k8官方网 收集整理的这篇文章主要介绍了 tensorflow学习笔记之五(卷积神经网络) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

      • 1. 图片识别问题简介以及经典数据集
        • 1.1 图片识别问题简介
        • 1.2 经典数据集
      • 1. 单通道图片求卷积
        • 1.1 基本的图片求卷积
        • 1.2 填充的图片求卷积
        • 1.3 tensorflow计算卷积
      • 2. 三通道图片求卷积
      • 3. 池化层
      • 4. 小结
        • 4.1 输入图片为正方形,卷积核为正方形,单卷积核,单通道
        • 4.2 输入图片为正方形,卷积核为正方形,单卷积核,三通道
        • 4.3 输入图片为正方形,卷积核为正方形,多卷积核,多通道
      • 5.

1. 图片识别问题简介以及经典数据集

1.1 图片识别问题简介

视觉是人类认识世界非常重要的一种知觉。对于人来说,通过视觉来识别手写体数字、识别图片中的物体或者找出图片中人脸的轮廓都是非常简单的任务。但是这对于计算机来说不是一件简单的事情。

图片识别问题希望借助计算机中的程序来处理、分析和理解图片中的内容,使得计算机可以从图片中识别各种不同模式的目标和对象。比如前面的mnist联系就是通过计算机来识别图片中的手写体数字。

1.2 经典数据集

mnist数据集:tensorflow入门数据集

cifar :cifar数据集是一个影响力很大的图像分类数据集。分为cifar-10和cifar-100两个问题,它们都是图像字典项目(visual dictionary)中800万张图片中的一个子集。cifar数据集中的图片是32*32的彩色图片。

imagenet:
无论是mnist还是cifar数据集,相比真实环境有两个最大的问题:

  • 现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的。
  • 现实生活中的物体类别很多,无论是10中还是100种都远远不够,而且一张图片中不会只出现一个种类的物体。
  • 为了更加贴近真实环境下的图像识别问题,由斯坦福大学的李飞飞教授带头整理的imagenet很大程度地解决了这两个问题。

    imagenet是一个基于wordnet的大型图像数据库。

    目标:抽取一个32323的图片的特征,再将提取的特征喂入到全连接网络。

    • 卷积可以认为是一种有效提取图像特征的方法。
    • 一般会用一个正方形的卷积核,遍历图片上的每个像素点。图片内的每个像素点,乘以卷积核上相对应的点的权重,求和,在加上偏置。

    1. 单通道图片求卷积

    1.1 基本的图片求卷积

    现在对于一个551的图片,用一个331的卷积核求卷积。

    如图所示,计算机会将一张551图片转换为一个55的矩阵,矩阵中的每个值代表其像素点的灰度。现在用一个33的矩阵对其求卷积。
    每次求卷积的过程为拿着卷积核在原始图片举证上求卷积。如图中所示,就是
    1∗(−1) 0∗0 2∗1 5∗1 4∗0 2∗1 3∗(−1) 4∗0 5∗1 1=11*(-1) 0*0 2*1 5*1 4*0 2*1 3*(-1) 4*0 5*1 1=1 1(1)00215140213(1)40511=1
    其总体大概过程如图
    图片来源于

    可以看我们是拿卷积核在原始图片上“滑动”求卷积。
    在这里,影响输出矩阵的规格的因素有,原始图片大小,卷积核大小,滑动的步长。

    一张图片经过一次卷积操作输出的边长 = ( 输入图片的边长 - 卷积核 1 ) /步长(向上取整)

    比如上图中,输出边长 = ( 5 - 3 1 ) / 1 = 3

    1.2 填充的图片求卷积

    有时候,需要在图片的周围进行填充(有全零填充和其他填充),如下图所示:

    那么输出的边长就等于 = 输入长度 / 步长 = 5 / 1 = 5(向上取整)
    在tensorflow中,用参数padding = ‘same’(填充) 或者 padding = ‘valid’(未填充) 表示

    总的来说,卷积是讲一个矩阵进行信息提取(特征抽取)的作用。参数为卷积核参数3 * 3 = 9个

    1.3 tensorflow计算卷积

    tf.nn.conv2d(
    输入描述: 一次喂入图片数, 图片分辨率(两位),通道数
    输出描述: 卷积核分辨率(两位), 通道数,核的个数
    核滑动步长,第一个和第四个固定为1。第二三个分别为行步长和列步长。
    pading = ‘valid’
    )

    # eg tf.nn.conv2d([batch, 5, 5, 1],[3, 3, 1, 16],[1, 1, 1, 1],padding = 'valid' )

    2. 三通道图片求卷积

    在一般情况下,我们遇到的图片都是彩色图片。在计算机中,他们都是三通道图片(三基色原理,rgb红绿蓝)。
    所以我们的图片矩阵变成了5 * 5 * 3。此时我们的卷积核变成了3 * 3 * 3 。

    # eg tf.nn.conv2d([batch, 5, 5, 3],[3, 3, 3, 16],[1, 1, 1, 1],padding = 'same' )

    3. 池化层

    池化的作用:

    • 减少特征的数量
    • 最大值池化可以提取图片纹理,均值池化可保留背景特征

    4. 小结

    从计算的角度来看:卷积操作就是矩阵操作。

    4.1 输入图片为正方形,卷积核为正方形,单卷积核,单通道

    不填充
    输出的矩阵边长=输入边长−卷积核边长 1步长输出的矩阵边长 =\frac{输入边长 - 卷积核边长 1}{步长} =1

    填充
    输出的矩阵边长=输入边长步长输出的矩阵边长 =\frac{输入边长 }{步长} =
    在这里有个疑惑,比如卷积核边长为三,填充一层,也就是输入边长 2。输出边长满足上述两个公式。
    假如卷积核边长为5。那么是填充一层还是两层?

    4.2 输入图片为正方形,卷积核为正方形,单卷积核,三通道

    边长与单通道类似

    输出通道数可以为1,每个对应的通道数相乘后相加。
    可以为3,每个对应的通道数相乘后,相互独立。
    也可以为9,输入的每个通道数与卷积核的通道数相乘,再相加。

    4.3 输入图片为正方形,卷积核为正方形,多卷积核,多通道

    边长与单通道类似

    输出通道数
    = 卷积核个数,每个对应的通道数相乘后相加。
    = 卷积核个数3, 每个对应的通道数相乘后,相互独立。
    = 卷积核个数9,输入的每个通道数与卷积核的通道数相乘,再相加。

    5.

    总结

    以上是凯发k8官方网为你收集整理的tensorflow学习笔记之五(卷积神经网络)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。

    • 上一篇:
    • 下一篇:
    网站地图