卷积神经网络一

一、卷积神经网络
卷积神经网络首先从他的起源和原理来了解和熟悉下他,下面咱们来看看百度百科摘得的一些资料。
卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。 [2] 它包括卷积层(convolutional layer)和池化层(pooling layer)。
20世纪60年代,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络(Convolutional Neural Networks-简称CNN)。由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,一般地,CNN的基本结构包括两层,其一为特征提取层,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射层(池化层),网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,这种特有的两次特征提取结构减小了特征分辨率。
总结:如果你决定上面的内容读着比较费劲的话那么我来概括一下,

   		1、卷积神经网络是一种前馈神经网络,并且可以直接输入原始图     像。就是说他是处理图片或者自然语言处理中的前期预处理阶段,真正在后面干活的是DNN。
   		2、卷积层可以减少特征值,从而减少反向传播的复杂度(卷积核中共享权值),使计算变得更容易实现。
   		3、卷积神经网络具有特征映射位移不变性(意思就是说卷积核去提取特征的时候映射出来的矩阵并不会改变原图像的特性--ReLu激活函数来让这一特征能够保存下来)
  理解和推演:首先你坐下来想想,你是怎么看到一个东西?咱们来推演一下,外界的光线照射物体然后将物体的投影映入你的视网膜,**经过瞳孔的放大和缩小来投影到后视网膜,然后后视网膜将映像图片转换成电子信号传达到大脑的神经元**(此处就相当于上面提到的卷积层和池化层,将外界大型的物体图像经过特征提取变成一个很小的图像),大脑的神经元经过化学反应(相当于sigmoid函数)来将图片信息进行处理,最终判断你看到的东西是一个什么东西(此处就相当于DNN对CNN提取后的特征进行处理和计算最终输出结果)。

二、图片特征提取(对图片进行卷积和池化)
下面对一个美女的照片进行矩阵转化
在这里插入图片描述
在这里插入图片描述
将上图的美女转化为矩阵之后的形状为502行、581列、4个维度矩阵的叠加态,由于好奇心纳闷咱们来将这四个维度依次还原来打印输出一下看看他的样子。核心代码是 lena = mping.imread(‘mv1.bmp’)
plt.imshow(lena[:,:,4])
plt.show()
第一维 在这里插入图片描述
第二维
第一个维度在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
以上五张图片我们可以看出来,没有第五个维度,并且是从0开始的,颜色方面也有不少差异,第四张图片的颜色应该是属于基色。下面的卷积就是对这三个维度的画面进行特征提取,然后再组成一张画面进行输出。

由于本人手比较懒所以给打架展示下三维图像。
在这里插入图片描述

左侧红色对号的1、2、3分别代表此图片的1维、2维、3维,维度也被成为通道,相对应的中间黄色对号的11、12、13则代表卷积核的3个维度,同理黄色21、22、23是另一个卷积核的三个维度,与图像的维度相互对应,此卷积核从图像的三个维度来提取特征然后特征汇总为一个点,三维聚点(对应位置相乘相加,然后再加上bias-- wx+b),最右侧中的每一个1里面的第一个元素就是他们加和之后经过ReLu函数处理之后的结果。
咱们利用上面的的卷积原理来测试下美女被卷积完之后的效果。核心代码如下。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过以上这两张图片用的是一个3
3的卷积核,可以看出来,卷积之后的图片有少许失真,这还不够,下面咱们再来试试9*9的卷积核之后的效果。
在这里插入图片描述
这张照片已经很明显的模糊了,下面我们会说到卷积的时候尽量用小的卷积核来卷积不仅可以减少反向传播复杂度而且还可以更多的保留一些维度。代码如下:
import matplotlib.pyplot as plt
import matplotlib.image as mping
import numpy as np
import tensorflow as tf

lena = mping.imread(“D:/Users/28542/scikit_learn_data/mv/mv11.bmp”)
读取图片
print(lena.shape)

lena = lena[:, : ,:3]
此处可以省略,意思是取三个通道,但是取四个通道也可以
height, width, channels = lena.shape
读取形状并赋值给height, width, channels
print(lena.shape)
查看lean的形状
print(type(lena))
查看lena的数据类型,可以查看是不是array类型的,输出结果为:<class ‘numpy.ndarray’>
plt.imshow(lena)
plt.show()
上面两步是展示
lena = np.reshape(lena,[-1,height,width,channels])
将lena的height, width, channels属性进行reshape再补充一个属性,变成四个属性,为后面的conv2d做准备。
print(lena.shape)
查看reshape之后的图片属性有没有改变,输出结果为(1, 501, 525, 4)。操作之前的属性为(501, 525, 4)

设置卷积核
卷积核形状

filters_test = np.zeros(shape=(9, 9, channels,2), dtype=np.float32)
卷积核填充
filters_test[0,1,:,0] = 1 # 列补充1
filters_test[1,:,1,1] = 1 # 行补充1

设置样本x的图
x = tf.placeholder(tf.float32,shape=(None,height,width,channels))
样本的格式是浮点数、长度、宽度、通道数
convulotion = tf.nn.conv2d(x,filters_test,strides=[1,2,2,1],padding=“SAME”)
构建卷积的逻辑,并且卷积的方式为SAME,步长为上下、左右都是2的步长。

with tf.Session() as sess:
output = sess.run(convulotion,feed_dict={x:lena})
print(output.shape)
plt.imshow(output[0,:,:,0])
plt.show()
打印9*9卷积核输出的图像

plt.imshow(output[0,:,:,1])
plt.show()
打印33卷积核输出的图像
卷积核的卷积方式‘SAME’的解释
SAME和VOLID两种卷积方式,SAME和VOLID的区别点主要体现在对数据的边框处理,我们称SAME卷积方式为全卷积,对边框没有任何信息丢失,而VOLID则会丢失,目前看SAME应用于卷积核的多一些,而VOLID用于池化核的多一些,下面咱们来重点说说SAME他的pading补0原理,那么咱们来举例说明吧,例:
数据集是28
28,卷积核是55,步长是33
第一步:首先我们来根据步长确认卷积之后的数据集大小,向上取整。28/3=10.意思是说不管我们用多大的卷积核最终要保证卷出一个10*10的矩阵。
第二步:计算需要补整排0的数量,
(28-5)/3=7 (向下取整)
那么需要补充的0 的排数为:
1+3+3=7
共计7排,同理可得列也是如此。
左右两边均匀排列一下,得到左边3列,右边4列。
通过以上这个小例子我们应该都能理解列他的原理列,那么咱们来说说VOLID,VOLID其实很简单,卷积核根据步长来跑,跑多少算多少,最后的如果边界有剩余那么就不要了。
对图像进行池化的演示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
通过上述三个不同的池化核对原始图片进行池化后的效果图可以看出,池话层相对于卷积层来说会有更多的损失和失真,那么大家可以试想一下如果在卷积核已经对原始图片卷积完之后再进行池化的话图像的失真度应该会更高,但是不用担心,咱们可以增加卷积核的数量来抵抗损失的信息,其实他背后的原理应该就是将图片更加的颗粒化了,来方便计算机的识别和后续特征的鲁棒性,增加了他的泛化能力。
下一篇文章带大家看看一个完整的CNN是如何工作的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值