欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习、深度学习的知识!

稀疏交互

在生物学家休博尔和维瑟尔早期关于猫视觉皮层的研究中发现,视觉皮层中存在一些细胞对输入空间也就是图像中的子区域非常敏感,我们称为感受野。在神经网络中,稀疏交互就是下一层节点只和上一层中的部分节点进行连接的操作。稀疏交互可以显著的降低神经网络中参数的数量。

左边是全连接方式,隐藏节点都需要所有的输入;右边是稀疏交互,隐藏层节点只接受一个区域内的节点输入。

稀疏交互的实现

以 MNIST 数据集为例,来实现稀疏交互,并输出结果对应的图片。

MNIST 原始图片:

为了进行局部连接,有两个重要的参数需要选择:

1.局部区域的大小

局部区域的大小,首先以 5 * 5 的局部区域为例:

2.局部特征的抽取次数

针对局部区域可以进行多次特征抽取,可以选择局部特征抽取的次数,首先以抽取 5 次为例。

3.步长

在确定局部区域大小之后,可以平滑的每次移动一个像素,也可以间隔 N 个像素进行移动。
如图:

也可以使用不同的特征提取器对同一片区域,进行多次特征提取,如图所示:

4.边缘填充

在进行一次局部连接的过程中,如果不进行边缘填充,图像的维度将会发生变化,如图所示:

4 * 4 的图像,进行了 3 * 3 的局部连接,维度发生了变化。

对于边缘的两种处理方法:

权值共享

权值共享的由来

降低网络中参数的个数,还有一个方法就是共享参数。每一组参数都可以认为是一个特征提取器,即使图像有一定的偏移,还是可以将相应的特征用同一组参数提取出来。

TensorFlow 实现局部连接和权值共享

如下图所示:
为了演示局部连接和权值共享在特征提取方面的作用,接下来将使用在稀疏交互中一种很常用的一组权值,它的作用是边缘提取。

就是这个矩阵组成的权值:

[[-1,-1,-1],
[-1,8,-1],
[-1,-1,-1]]

使用 TensorFlow 的 convolution 函数对 MNIST 数据集做卷积操作。因为这部分代码涉及到维度相关的操作比较多,在稍后卷积网络部分会有详细说明。这段代码单独实现了卷积功能:

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt#引入 MNIST 数据集
mnist = input_data.read_data_sets("/tmp/data/", one_hot=False)#选取训练集中的第 1 个图像的矩阵
mnist_one=mnist.train.images[0]plt.subplot(121)
plt.imshow(mnist_one.reshape((28,28)), cmap=plt.cm.gray)#输出图片的维度,结果是:(784,)
print(mnist_one.shape)#因为原始的数据是长度是 784 向量,需要转换成 1*28*28*1 的矩阵。
mnist_one_image=mnist_one.reshape((1,28,28,1))#输出矩阵的维度
print(mnist_one_image.shape)#滤波器参数
filter_array=np.asarray([[-1,-1,-1],[-1,8,-1],[-1,-1,-1]])#滤波器维度
print(filter_array.shape)#调整滤波器维度
filter_tensor=filter_array.reshape((3,3,1,1))#卷机操作
conv_image_tensor=tf.nn.convolution(mnist_one_image,filter=tf.to_float(filter_tensor),padding="SAME")#返回的张量维度
print(conv_image_tensor.shape)#调整为二维图片
conv_image=tf.reshape(conv_image_tensor,[28,28])with tf.Session() as sess:#获得张量的值
conv_image=sess.run(conv_image)plt.subplot(122)#使用 matplotlib 输出为图片
plt.imshow(conv_image, cmap=plt.cm.gray)plt.show()

池化介绍

池化

除了之前的两种方式,在数据量很大,类比现实生活中事情纷繁复杂的时候,我们总是想抓住重点,在图像中,可以在一个区域选取一个重要的点。

一般是选择值最大的点,作为这一个区域的代表:

如图所示:


这个池化选取的是 2 * 2 的区域,留下值最大点,步长为 2。原来 4 * 4 的图片矩阵池化之后变成了 2 * 2 的图片矩阵。

手写数字识别

接下来将会以 MNIST 数据集为例,使用卷积层和池化层,实现一个卷积神经网络来进行手写数字识别,并输出卷积和池化效果。

数据准备

  • MNIST 数据集下载

MNIST 数据集可以从 THE MNIST DATABASE of handwritten digits 的网站直接下载。
网址:http://yann.lecun.com/exdb/mnist/

train-images-idx3-ubyte.gz: 训练集图片
train-labels-idx1-ubyte.gz: 训练集列标
t10k-images-idx3-ubyte.gz: 测试集图片
t10k-labels-idx1-ubyte.gz: 测试集列标

TensorFlow 有加载 MNIST 数据库相关的模块,可以在程序运行时直接加载。

代码如下:

from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as pyplot#引入 MNIST 数据集
mnist = input_data.read_data_sets("/tmp/data/", one_hot=False)#选取训练集中的第 1 个图像的矩阵
mnist_one=mnist.train.images[0]#输出图片的维度,结果是:(784,)
print(mnist_one.shape)#因为原始的数据是长度是 784 向量,需要转换成 28*28 的矩阵。
mnist_one_image=mnist_one.reshape((28,28))#输出矩阵的维度
print(mnist_one_image.shape)#使用 matplotlib 输出为图片
pyplot.imshow(mnist_one_image)pyplot.show()

代码的输出依次是:
1.单个手写数字图片的维度:
(784,)

2.转化为二维矩阵之后的打印结果:
(28, 28)

3.使用 matplotlib 输出为图片

本篇文章出自http://www.tensorflownews.com,对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站!

卷积的发展历程,原理和基于 TensorFlow 的实现相关推荐

  1. 卷积神经网络发展历程及经典论文

    2012年,AlexNet横空出世,以极大优势赢得了ImageNet 2012图像识别挑战赛的冠军,也引发研究人员对早期神经网络.卷积神经网络的思考和再研究.至此,卷积神经网络开始领衔掀起此轮人工智能 ...

  2. 基于 TensorFlow 在手机端实现文档检测

    手机端运行卷积神经网络的一次实践 - 基于 TensorFlow 和 OpenCV 实现文档检测功能 1. 前言 本文不是神经网络或机器学习的入门教学,而是通过一个真实的产品案例,展示了在手机客户端上 ...

  3. 基于TensorFlow深度学习框架,运用python搭建LeNet-5卷积神经网络模型和mnist手写数字识别数据集,设计一个手写数字识别软件。

    本软件是基于TensorFlow深度学习框架,运用LeNet-5卷积神经网络模型和mnist手写数字识别数据集所设计的手写数字识别软件. 具体实现如下: 1.读入数据:运用TensorFlow深度学习 ...

  4. 基于TensorFlow的CNN卷积网络模型花卉分类GUI版(2)

    一.项目描述 10类花的图片1100张,按{牡丹,月季,百合,菊花,荷花,紫荆花,梅花,-}标注,其中1000张作为训练样本,100张作为测试样本,设计一个CNN卷积神经网络花卉分类器进行花卉的分类, ...

  5. IO多路复用器 select, epoll发展历程,工作原理,区别

    什么是IO多路复用器 首先这里的IO指的是网络IO,也就是网络连接,如果把一个IO想象成一条路,这些路是连接到内核的,就程序自身而言它是不知道这些路上有没有数据到达的. 为了知道这一点,程序就得遍历每 ...

  6. 《新一代SDN——VMware NSX 网络原理与实践》——第1章 SDN与网络虚拟化的起源与现状 1.1SDN的起源和发展历程...

    本节书摘来自异步社区<新一代SDN--VMware NSX 网络原理与实践>一书中的第1章,第1.1节,作者:范恂毅 , 张晓和著,更多章节内容可以访问云栖社区"异步社区&quo ...

  7. 【深度学习】我的第一个基于TensorFlow的卷积神经网络

    基于MNIST数据集实现简单的卷积神经网络,熟悉基于TensorFlow的CNN的流程和框架. #1.导入相关库 import numpy as np import tensorflow as tf ...

  8. CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别

    CV之CNN:基于tensorflow框架采用CNN(改进的AlexNet,训练/评估/推理)卷积神经网络算法实现猫狗图像分类识别 目录 基于tensorflow框架采用CNN(改进的AlexNet, ...

  9. 「基于模型的系统工程」的发展历程

    节选自<「基于模型的系统工程」的发展历程>,因篇幅有限,完整报告文末领取. 当下,人们热衷于讨论基于计算机的建模.模型.数据库和敏捷设计方法.然而,很少有人会耐心地审视和理解大量的技术创新 ...

  10. 基于深度学习的目标检测发展历程:deep_learning_object_detection

    目标检测论文从 2014-2018 模型表现表格 Detector VOC07 (mAP@IoU=0.5) VOC12 (mAP@IoU=0.5) COCO (mAP) Published In R- ...

最新文章

  1. 计算机文献检索综合性实验报告,文献检索综合性实验报告模板.doc
  2. 路由器计算机无法上网,路由器安装后电脑无法上网怎么办
  3. shell 中引用参数总结
  4. MySQL事物的概念
  5. mysql sphinx windows安装_Sphinx在windows下安装使用[支持中文全文检索]
  6. SecureCRTSecureFX_HH_x64_7.0.0.326 crt部署项目到服务器
  7. 笔记15(Linux监控平台)
  8. 20145109 《Java程序设计》第七周学习总结
  9. mvc表单Form提交 --实体
  10. 程序员代码面试指南读书笔记1
  11. linux返回上一步命令
  12. python一笔画五角星_隐藏在一笔画五角星中的秘密,画法简单的符号,却有丰厚的内涵...
  13. (一)JMeter性能测试,完整入门篇:性能测试操作步骤
  14. 富途证券赴美上市喜迎开门红,盘中一度大涨近45%
  15. mastercam2020后处理_[后处理]Mastercam 四轴Fanuc系统MP9G后处理
  16. Java双亲委派模型是什么、优势在哪、双亲委派模型的破坏
  17. 导数的奇偶性(含证明)
  18. ie调用java闪退_win7系统位数不兼容导致Ie浏览器频繁出现闪退的解决方法
  19. Java-PTA 奇偶分家
  20. JS识别二维码,JS解二维码,前端识别二维码

热门文章

  1. 游戏世界观构建_我们如何构建技术落后的世界
  2. 算法 博士_Strangecode博士-我如何学会不再担心并喜欢算法
  3. k8s mysql 查询_MySql | 为什么大家都在说 Select * 效率低
  4. 5安卓输入法键盘显示 搜索_日语输入法怎么用?
  5. libevent c++高并发网络编程_高并发-网络I/O
  6. python按行拆分表格_Pandas进阶之DataFrame行列拆分
  7. java考ccf_CCF考试试题之门禁系统java解题代码
  8. subplot()函数--Matplotlib
  9. matlab complex
  10. source ./ 和 . 的区别