一、 卷积


1. why convolution?

1).计算机视觉问题

分类问题:

物体识别:

新型艺术:

2).对大量数据的深度学习

* 黑白图片与彩色图片

  • RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。

  • 通常情况下,RGB各有256级亮度,用数字表示为从0、1、2……直到255。注意虽然数字最高是255,但是0也是数值之一,因此共256级。

  • 利用全连接网络来训练学习产生的两个问题:

  • 计算量非常大,对内存的要求高;模型越大,要求的数据样本也就越大,获取数据的成本变高?
  • 当数据量不够巨量,根据我们前面的学习指导大模型极容易导致过拟合,模型纠结与无关紧要的细节,用记忆力吓唬人。

2. 卷积原理

1). 卷积网络的神经科学基础

卷积核在图像中先提取出若干个区域的局部的特征,在进行进一步的综合处理得到更进一步的特征,最终处理得到全局特征

对于一张待识别的图片,卷积核会进行纵向识别和横向识别,得到新的特征图

卷积操作:newimage=(n−f)+1

  • 视觉系统:脑皮层的视觉神经元和瞳孔所受到到刺激存在某种对应关系,当瞳孔受到某种刺激,后脑皮层的某一部分神经元就会被激活为兴奋状态
  • 神经元检测:前端神经元只对特定的光模式(精确定向的条纹)有强烈反应

3. 卷积层的代码实现


TensorFlow提供的进行卷积运算的函数:

tf.nn.conv2d(input,filter,stride,padding,ues_cudnn_on_gpu,data_format,name)

1.参数input:

指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意这是一个4维的Tensor,要求类型为float32和float64其中之一
例如:input = tf.Variable(tf.random_normal([1,3,3,5]))


2.参数filter:¶

相当于CNN中的卷积核,它要求是一个Tensor,具有[filter_height, filter_width, in_channels, out_channels]这样的shape,具体含义是[卷积核的高度,卷积核的宽度,图像通道数,卷积核个数],要求类型与参数input相同。
例如:filter = tf.Variable(tf.random_normal([3,3,5,1]))

3.参数padding:

卷积操作得到的新图大小为4,发生了缩小,如此一来有两个问题:

  1. 每次做卷积操作的时候,图像都会缩小,重复几次卷积操作后图像就会变得很小,可能会缩小到1∗11∗1 ,你可能不希望你的图像在每次卷积操作都发生缩小
  2. 图像角落和边缘的像素点利用率很低,尤其是角落的点,只被计算一次,会造成图像边缘信息丢失

p的取值,便是由padding决定的:

  1. padding只能设置为"SAME","VALID"其中之一
  2. padding设置为SAME:添加全0进行填充;
  3. SAME: Pad so that output size is the same as the input size
  4. newimage=(n+2p−f)+1=n
    p=(f−1)/2
  5. f=3,p=(3−1)/2=1
    f=5,p=(5−1)/2=2

  6. padding设置为VALID:不进行添加0的操作;默认情况设置为VALID no padding: newimage=(n−f)+1

  7. 4.参数strides:

    卷积时在图像每一维的步长,这是一个一维的向量:[1, stride,stride, 1],因为我们不想在batch和channels上做卷积,所以这两个维度设为了1

  8. 5.参数use_cudnn_on_gpu

    bool类型,选择是否用GPU进行运算加速。默认为True

    6.参数data_format

    data_format就是input的Tensor格式:

  9. TensorFlow格式下,input为[batch,in_height,in_with,in_channels],Theano模式下会将in_channels提前到第二个维度,因此要用data_format指定,一般默认

  10. 若需要提前,指定data_format= 'channels_first'即可

结果返回一个Tensor,这个输出,就是我们常说的feature map,shape仍然是[batch, height, width, channels]这种形式。

  • Theano是一个Python库,可以在CPU或GPU上运行快速数值计算,这是Python深度学习中的一个关键基础库
  • 目前流行的几种工具:Theano、TensorFlow、Torch、MXNet、Caffe、Neon 和 CNTK,其中前四个框架有着众多高质量的学习资源,便于初学者理解和实现,虽然微软的 CNTK 和英特尔的 Nervana Neon 也是强大的工具,我们却很少能见到有关它们的新手级资料。

卷积的特点


相比于全连接网络,卷积操作拥有三个特性,参数共享、稀疏连接、平移不变性,前面两个特性是卷积网络有效减少参数的原因。

  • 1、稀疏连接:此概念是相比较与全连接来的,全连接当中每一个神经元会连接到每一个输入点,而稀疏连接只连接到卷积核窗口对应的输入点,由此产生了稀疏连接的效果
  • 2、参数共享:全连接网络中的每一个权重元素都只使用了一次,而在卷积神经网络中,卷积核的每一个参数都会作用在输入图片的每一个位置上,每一个被卷积窗口扫描到的区域共享一组参数,相比于全连接网络中,每一个神经元都要学习一个单独的参数而言,卷积运算中每一层神经元只需要学习一个卷积核大小的参数集合即可,有效降低参数数量
  • 平移等变性:等变是数学中函数的性质,对于函数f(x)与g(x),若f(g(x))=g(f(x)),则称f(x)对于g(x)具有等变性,卷积运算的平移不变性是指卷积函数f(x)对于平移函数g(x)具有等变性,也就是对于一张图片I,先对图像数据点坐标做平移操作再卷积,和先对图像卷积再对特征图片的坐标进行平移,得到的特征图片的结果是一样的,同样能够提取到相应的特征,正是参数共享机制保证了平移不变性。但是这种不变性只是对平移操作才成立,其他的图像缩放、旋转变换下,还需要其他处理机制才能保证不变性。
#tf.nn.conv2d举例
import tensorflow as tf  a =tf.Variable(tf.random_normal([1,4,4,2]))
a = tf.floor(a) #向下取整的函数filter = tf.Variable(tf.random_normal([3,3,2,3]))
#filter = tf.floor(filter)op = tf.nn.conv2d(a, filter, strides=[1, 1, 1, 1], padding='VALID')
init_op=tf.global_variables_initializer()with tf.Session() as sess:  init_op.run()print("image:")  image=sess.run(a)  print (image)  #print("filter:")  #filter=sess.run(filter)  #print (filter)print("reslut:")  result=sess.run(op)  print (result)  
#7.2 卷积运算程序
import tensorflow as tf
import numpy as np#使用numpy工具初始化一个名为M的数组,形状为4x4,数据类型为float32
#并使用numpy的reshape()函数调整输入的格式M = np.array([[[2],[1],[2],[-1]],[[0],[-1],[3],[0]],[[2],[1],[-1],[4]],[[-2],[0],[-3],[4]]],dtype="float32").reshape(1, 4, 4, 1)
filter_weight = tf.get_variable("weights",[2, 2, 1, 1],initializer = tf.constant_initializer([[-1, 4],[2, 1]]))#通过get_variable()函数创建过滤器的偏置项,代码中[1]表示过滤器的深度。biases = tf.get_variable("biase",[1],initializer = tf.constant_initializer(1))x = tf.placeholder('float32', [1,None, None,1])conv = tf.nn.conv2d(x, filter_weight, strides=[1, 1, 1, 1], padding="SAME")#bias_add()函数具有给每一个节点加上偏置项点功能。这里不能直接使用加法的原因是
#矩阵上不同位置上的节点都需要加上同样的偏置项。因为过滤器深度为1,
#故偏置项只有一个数,结果为3x4的矩阵中每一个值都要加上这个偏置项。
#原型bias_add(value,bias,data_format,name)
add_bias1 = tf.nn.bias_add(conv, biases)init_op=tf.global_variables_initializer()with tf.Session() as sess:init_op.run()conv = sess.run(conv, feed_dict={x: M})M_conv1=sess.run(add_bias1, feed_dict={x: M})#输出结果并不是一个张量,而是数组print("M after convolution: \n", conv)print("conv after bias_add1: \n", M_conv1)

卷积神经网络(2)--卷积神经网络的认识、黑白图像的卷积操作相关推荐

  1. 卷积神经网络:VGG16 是基于大量真实图像的 ImageNet 图像库预训练的网络

    卷积神经网络:VGG16 是基于大量真实图像的 ImageNet 图像库预训练的网络 图片输入->卷积->填充(Padding)->池化(pooling)->平坦(Flatte ...

  2. 【深度学习】深入浅出神经网络框架的模型元件(常用层和卷积层)

    [深度学习]深入浅出神经网络框架的模型元件(常用层和卷积层) 文章目录 1 常用层1.1 Dense1.2 Activation层1.3 Dropout1.4 Flatten 2 卷积层2.1 Cov ...

  3. 请概述可视化卷积神经网络的中间输出的基本思想。_卷积神经网络为什么能称霸计算机视觉领域?...

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 导言 在 ...

  4. 一维卷积神经网络_人人都能看得懂的卷积神经网络——入门篇

    点击蓝字关注我们 近年来,卷积神经网络热度很高,在短时间内,这类网络成为了一种颠覆性技术,打破了从文本.视频到语音多个领域的大量最先进的算法,远远超出其最初在图像处理的应用范围. 卷积神经网络的一个例 ...

  5. GNN-图卷积模型-2016:PATCHY-SAN【图结构序列化:将图结构转换成了序列结构,然后直接利用卷积神经网络在转化成的序列结构上做卷积】

    我们之前曾提到卷积神经网络不能应用在图结构上是因为图是非欧式空间,所以大部分算法都沿着找到适用于图的卷积核这个思路来走. 而 PATCHY-SAN 算法 <Learning Convolutio ...

  6. python卷积神经网络图像,python卷积神经网络代码

    神经网络算法原理 一共有四种算法及原理,如下所示:1.自适应谐振理论(ART)网络自适应谐振理论(ART)网络具有不同的方案.一个ART-1网络含有两层一个输入层和一个输出层. 这两层完全互连,该连接 ...

  7. 卷积 对图像进行卷积操作 卷积神经网络

    目录 卷积 对图像进行卷积操作 卷积神经网络 卷积(Filtering) 池化(下采样)(Pooling) 修正线性单元(Rectified Linear Units)(ReLus激活函数) 全连接层 ...

  8. 谈谈卷积神经网络和循环神经网络

    看起来毫不相关的两种网络,其有哪些近似之处呢? 这篇文章将用简易文字总结. 卷积神经网络-CNN 首先,卷积和神经网络是两个独立模块: 卷积是为了提取特征,卷积核为待求参数,客观世界表现为对图像数据提 ...

  9. 卷积神经网络和循环神经网络的思想内核是什么

    CNN(卷积神经网络).RNN(循环神经网络).DNN(深度神经网络)的内部网络结构有什么区别? 如下:1.DNN:存在着一个问题--无法对时间序列上的变化进行建模.然而,样本出现的时间顺序对于自然语 ...

  10. 卷积神经网络相比循环神经网络具有哪些特征

    CNN卷积神经网络结构有哪些特点? 局部连接,权值共享,池化操作,多层次结构. 1.局部连接使网络可以提取数据的局部特征:2.权值共享大大降低了网络的训练难度,一个Filter只提取一个特征,在整个图 ...

最新文章

  1. 吃透这套架构体系,三年成为架构师!
  2. python3 中递归的最大次数
  3. git push origin master和git push有什么区别?
  4. Linux执行yum不显示时间,Linux停的yum命令详解(朝花夕拾)
  5. ES权威指南[官方文档学习笔记]-8
  6. Discuz 升级X3问题汇总整理
  7. 2.Pycharm + Django + Python进行WEB路由配置
  8. 在css/js代码上线之后开发人员经常会优化性能,从用户刷新网页开始,一次js请求一般情况下有哪些地方会有缓存处理?...
  9. java ssm 分页_ssm实现分页查询的实例
  10. Linux父进程如何发信号给子进程,关于C#:fork和signal:如何将信号从父进程发送到特定的子进程...
  11. NVIDIA史上最大显卡质量事故,我正在用Vostro 1400
  12. 【智能制造】智能制造将势不可挡
  13. python自动填写网页数据并提交_python实现问卷星网站的自动填写
  14. 画图软件origin-柱状图断点设置
  15. 第四章 软件总体设计
  16. 为什么我说“设计模式”的设计理念是误人子弟?
  17. VR/AR年度创投报告
  18. 火线 地线 零线 漫谈
  19. Mac系统入门之怎么切换输入法
  20. 【瑞数5】浅谈某普期刊JS逆向的环境检测点

热门文章

  1. 基于51单片机制作超声波避障小车+舵机控制
  2. dataframe类型数据的遍历_pandas中遍历dataframe的每一个元素
  3. 中兴路由器,交换机DHCP原理,dhcp配置,实例
  4. 《Java170道面试笔试题全面含答案》
  5. Lambda表达式的几种简化形式
  6. 计算机的计算密度相关,专家人才库数据----中国科学院计算技术研究所
  7. 找工作神器,提取各大网站有效的招聘信息(前程无忧、智联招聘、猎聘网)...
  8. 电子签名具备法律效力吗?这些知识点你需要了解
  9. 【Java】认识Sring、String的常见操作和StringBuffer 和StringBuilder的区别【字符串详解】
  10. 安卓pdf阅读器_推荐一款手机PDF阅读器、编辑器-xodo docs安卓版