神经网络学习–用卷积神经网络进行图像识别「建议收藏」

神经网络学习–用卷积神经网络进行图像识别「建议收藏」卷积神经网络特别适合处理像图片、视频、音频、语言文字等,这些与相互位置有一定关系的数据。卷积神经网络(ConvolutionalNerualNetwork,CNN)为什么计算机可以处理图片–因为在计算机语言中图片可以用数字化,用四维数组来表示既然卷积神经网络可以处理图片,那么我们就要理解图片在计算机语言中是如何表达的。图片其实是“点阵”图,由一个个点按照一定的顺序组合而成,那我们就可以联想到一个概念–数组。图片可以分为三类:纯黑白图片、灰度图片、彩色图片关于图片数字化,以最.

大家好,又见面了,我是你们的朋友全栈君。

目录

卷积神经网络(Convolutional Nerual Network,CNN)

为什么计算机可以处理图–因为在计算机语言中图片可以用数字化,用四维数组来表示

卷积层定义

卷积层计算的代码实现

卷积神经网络(Convolutional Nerual Network,CNN)

卷积神经网络特别适合处理像图片、视频、音频、语言文字等,这些与相互位置有一定关系的数据。

卷积神经网络与多连接神经网络一样,都属于神经网络的一种类别,只是多连接神经网络的隐藏层的特点是称为多连接层的该层上的每一个节点与上一层的全部节点是全连接的关系,卷积神经网络的隐藏层上的每一个节点与上一层的全部节点直接并非是全部连接的关系,而是仅与一部分的节点有连接。神经网络学习--用卷积神经网络进行图像识别「建议收藏」神经网络学习--用卷积神经网络进行图像识别「建议收藏」

 

为什么计算机可以处理图片

–因为在计算机语言中图片可以用数字化,用四维数组来表示

既然卷积神经网络可以处理图片,那么我们就要理解图片在计算机语言中是如何表达的。图片其实是“点阵”图,由一个个点按照一定的顺序组合而成,那我们就可以联想到一个概念–数组。

图片可以分为三类:纯黑白图片、灰度图片、彩色图片

关于图片数字化,以最简单的纯黑白图片为例,我们可以用二维数组–矩阵来表示,比如h×w,高度h代表该点阵有多少行,也可以理解成每列有多少点;宽度w代表该点阵每行有多少点;通常我们说的摄像头是多少万像素,其实就是这个摄像头拍出来的照片保存成“点阵”图后的高度h和宽度w相乘的结果,如1900万×1250万这种写法。

上面说的是矩阵的维度,下面说矩阵中每个点的值所代表的含义。矩阵中每一个点一般叫“像素”,其值叫“像素值”,对于纯黑白图片,其像素值可以用0或1表示,0代表该点是白色,1代表该点是黑色;对于灰度图片,其像素值可以用[0,255]范围内的一个数字来代表黑色的深浅程度;对于彩色图片,每个点会用一个向量来表示,如RGB,即这个“点”此时是一个三维向量,RGB分别代表红色、绿色和蓝色,通常把这三项叫做该“点”颜色的通道,即分别为R通道、G通道、B通道。

这就意味着,世界上所有的图片,都可以数字化!图片数字化以后,就可以利用计算机语言中的数组来表达!这就是图片可以用计算机处理的第一步!

如下图,数字“2”的一个最简单的6×6的纯黑白图片的点阵图为:

神经网络学习--用卷积神经网络进行图像识别「建议收藏」

该点阵图的数字化表达为(用二维数组进行表达):

[[0,0,1,1,0,0],
[0,1,0,0,1,0],
[0,0,0,0,1,0],
[0,0,0,1,0,0],
[0,0,1,0,0,0],
[0,1,1,1,1,0]]

 

卷积层定义

同全连接层一样,卷积层也是神经网络中包含某一特点的一个隐藏层。该隐藏层的作用就是对输入层做卷积。要了解卷积层需要了解两个概念,一是卷积核,另一个是卷积运算。

卷积核是一个数字矩阵(英文是filter,或者kernel),卷积核的大小即该数字矩阵的维度。

卷积运算,见下图,卷积核与左侧的虚线框内的子矩阵先点乘,后求和。这个运算就是卷积运算。之后卷积核会继续与输入矩阵的第二个子矩阵进行同样的卷积运算。


神经网络学习--用卷积神经网络进行图像识别「建议收藏」

得到的卷积层输出矩阵有两种情况,①不填充节点0,则得到的输出矩阵维数会减小;②填充节点0,则得到的输出矩阵维数不变

神经网络学习--用卷积神经网络进行图像识别「建议收藏」神经网络学习--用卷积神经网络进行图像识别「建议收藏」

 

理解一下卷积运算的好处

①降低数据维度,不填充节点0,得到的输出矩阵维数会减小

②特征提取:卷积运算相当于把原图中相邻几个节点一起进行运算,得到一个数字,该数字包含了这几个节点的【综合数值】+【相对位置的信息】的特征(这是一个特征提取的过程)。举个栗子,图13.5中的数字5,在一定程度上代表了“2”字“向右上方转折”这一笔画特征,这是输入层的单个点所不能包含的信息。

③降低计算复杂度,利用上面的特征提取,可以利用特征来对图像进行识别,能比单点识别的运算量小。举个栗子,图13.5中的数字5,代表“2”字“向右上方转折”这一笔画特征,如果某图片的数字是“1”,进行卷积运算后得到的输出层相同位置的数字不是5,即可判断出,该数字不是2。而不用长篇幅的单点识别对比。通过特征提取,这个特征能用来识别是不是数字“2”的重要依据之一。

④增加卷积层的数量,可以把低级别的特征逐步提取成为高级别特征。—-这是卷积层的最重要的能力!!

 

卷积层计算的代码实现

import tensorflow as tf
xData=tf.constant([[[0],[0],[1],[1],[0],[0]],[[0],[1],[0],[0],[1],[0]],
                   [[0],[0],[0],[0],[1],[0]],[[0],[0],[0],[1],[0],[0]],
                   [[0],[0],[1],[0],[0],[0]],[[0],[1],[1],[1],[1],[0]]],dtype=tf.float32)
kernel=tf.constant([[[1],[2]],[[3],[4]]],dtype=tf.float32)
y=tf.nn.conv2d(input=tf.reshape(xData,[1,6,6,1]),filter=tf.reshape(kernel,[2,2,1,1]),striders=[1,1,1,1],padding='VALID')
sess=tf.Session()
result=sess.run(y)
print(y)

解释一下代码所用到的语句的意思

tf.constant是tf中生成一个不会改变的张量的函数,即常量张量

tf.nn.conv2d(input,filter,strides=[,,,],padding=)
tf.nn.conv2d的四个命名参数:
input是输入数据,input要求输入的数据是一个四维数组,上面xData我们定义的是一个三维数组,通过tf.reshape把三维的数组变成四维的数组输入给input。
其中第一个维度代表一次要处理的图片数量,第二、三个维度代表输入图片的h和w,第四个维度代表图片彩色的通道数。
这里我们把xData reshape成[1,6,6,1],即一次处理一张图片,该图片的h和w分别为6、6,黑白图片的通道数为1,把xData reshape后满足参数input的要求。
即记住input实际输入的是一个四维数组
简记input=[一次处理图片数量,h,w,通道数量]

filter是卷积核,要求输入的数据也是一个四维数组,简记filter=[h,w,输入通道数,输出通道数]
其中输入通道数和输出通道数一般都是相等的。
对于上面代码filter=tf.reshape(kernel,[2,2,1,1])中[2,2,1,1]的理解可以参照上段对input的理解。
且记住filter实际输入的是一个四维数组

strides=[,,,]输入的是一个四维的向量,用于指定卷积时卷积核移动的步长。
每个维度分别对应在输入数组(input)4个维度上的步长。
举个栗子:striders=[1,2,3,1],即代表对输入数组(input),每次处理1张图片,每张图片隔2步横着走,隔3步竖着走,在单个通道内走1步

padding只有两个值:'VALID' or 'SAME',前者代表不填充节点0,后者代表填充节点0

多说一句~这里提供的代码时1.x版本的tensorflow可运行的代码,如果安装的2.x版本的tensorflow可以在上段代码的前面加上下面两句话(本意是导入1.x版本的tensorflow且使得2.x版本的语句失效,不过这个方法会出现警告,有一天可能会失效~~)

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.
Instructions for updating:
non-resource variables are not supported in the long term

#即disable_resource_variables在未来的版本中会被去掉

 

以上为作者学习《深度学习–基于Python语言和TensorFlow平台(视频讲解版)》对卷积神经网络的复习、理解加总结,如需学习更详尽的知识,请参考本书。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137862.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 如何配置maven本地仓库_maven指定本地仓库

    如何配置maven本地仓库_maven指定本地仓库1)配置本地仓库1)Maven的核心程序并不包含具体功能,仅负责宏观调度。具体功能由插件来完成。Maven核心程序会到本地仓库中查找插件。如果本地仓库中没有就会从远程中央仓库下载。此时如果不能上网则无法执行Maven的具体功能。为了解决这个问题,我们可以将Maven的本地仓库指向一个在联网情况下下载好的目录。2)Maven默认的本地仓库:~.m2\repository目录。Tips:~表示当前用户的家目录。3)Maven的核心配置文件位置:解压目录E:\apache-maven.

    2022年9月14日
    0
  • linux(11)配置环境变量[通俗易懂]

    linux(11)配置环境变量[通俗易懂]前言在自定义安装软件的时候,经常需要配置环境变量,下面进行详细解析 环境变量配置文件|用户|配置文件||:|:||系统环境|/ect/profil

    2022年7月28日
    1
  • Hadoop之hdfs体系结构

    Hadoop之hdfs体系结构4.HDFS的体系结构4.1体系结构解析HDFS采用的是hostname01/slaves这种主从的结构模型来管理数据,这种结构模型主要由四个部分组成,分别是Client(客户端)、Namenode(名称节点)、Datanode(数据节点)和SecondaryNameNode。真正的一个HDFS集群包括一个Namenode和若干数目的Datanode。Namenode是一个中心服务器,…

    2022年5月28日
    33
  • RestEasy 调用Rest接口使用详解[通俗易懂]

    RestEasy 调用Rest接口使用详解[通俗易懂]RestEasy 调用Rest接口使用详解

    2022年6月17日
    63
  • 网络号 子网号 主机号「建议收藏」

    网络号 子网号 主机号「建议收藏」网络号子网号主机号第一个例子:已知 IP:192.169.20.50   子网掩码:255.255.255.224  求网络号 子网号 主机号。首先子网掩码255.255.255.224转换为二进制位255.255.255.224:11111111.11111111.11111111.11100000可以看到这个掩码的左边三节与C类默认掩码相同,只有第四节与C类默认掩码不 同,

    2022年6月24日
    28
  • debian6 安装 vmtools

    debian6 安装 vmtoolsVmware7自带的tools,在debian5和centos5上都可以正常安装,在debian6上就不ok了,下面是解决方案。1.添加源debhttp://debian.uchicago.edu/debian/squeezemaincontribdeb-srchttp://debian.uchicago.edu/debian/squeezemaincon

    2022年10月19日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号