深度学习之 TensorFlow(四):卷积神经网络
基础概念:
卷积神经网络(CNN):属于人工神经网络的一种,它的权值共享的网络结构显著降低了模型的复杂度,减少了权值的数量。卷积神经网络不像传统的识别算法一样,需要对数据进行特征提取和数据重建,可以直接将图片作为网络的输入,自动提取特征,并且对图形的变形等具有高度不变形。在语音分析和图像识别领域有重要用途。
卷积:卷积是泛函分析中的一种积分变换的数学方法,通过两个函数 f 和 g 生成第三个函数的一种数学算子,表征函数 f 与 g 经过翻转和平移的重叠部分的面积。设函数 是定义在 上的可测函数,与的卷积记作,它是其中一个函数翻转并平移后与另一个函数的乘积的积分,是一个对平移量的函数,也就是:
具体解释下:
1.已知两函数f(t)和g(t)。下图第一行两图分别为f(t)和g(t)。
2.首先将两个函数都用来表示,从而得到f()和g()。将函数g()向右移动t个单位,得到函数g(-t)的图像。将g(-t)翻转至纵轴另一侧,得到g(-(-t))即g(t-)的图像。下图第二行两图分别为f()和g(t-)。
3.由于非常数(实际上是时间变量),当时间变量(以下简称“时移”)取不同值时,能沿着轴“滑动”。下图第三四五行可理解为“滑动”。
4.让从-∞滑动到+∞。两函数交会时,计算交会范围中两函数乘积的积分值。换句话说,我们是在计算一个滑动的的加权总和(weighted-sum)。也就是使用当做加权函数,来对 f()取加权值。
最后得到的波形(未包含在此图中)就是f和g的卷积。
神经网络的基本组成包括输入层、隐藏层、输出层。卷积神经网络的特点在于隐藏层分为卷积层和池化层。卷积层通过一块块的卷积核在原始图像上平移来提取特征,每一个特征就是一个特征映射;而池化层通过汇聚特征后稀疏参数来减少要学习的参数,降低网络的复杂度,池化层最常见的包括最大值池化 (max pooling) 和平均值池化 (average pooling) 。
卷积核在提取特征映射时的动作称为 padding,其有两种方式,即 SAME 和 VALID。由于移动步长(Stride)不一定能整除整张图的像素宽度,我们把不越过边缘取样称为 Vaild Padding,取样的面积小于输入图像的像素宽度;越过边缘取样称为 Same Padding, 取样的面积和输入图像的像素宽度一致。
几种不同的卷积神经网络:
1.LeNet
- 输入层:32 x 32
- 卷积层:3个
- 下采样层:2个
- 全连接层:1个
- 输出层:10个类别(数字0~9的概率)。
(1)输入层。输入图像尺寸为32 x 32。
(2)卷积层:卷积运算的主要目的是使原信号特征增强,并且降低噪音。
(3)下采样层:下采样层主要是想降低网络训练参数及模型的过拟合程度。通常有以下两种方式。
- 最大池化(max pooling):在选中的区域中找最大的值作为采样后的值。
- 平均值池化(mean pooling):把选中区域中的平均值作为采样后的值。
(4)全连接层:计算输入向量和权重向量的点积,再加上一个偏置,随后将其传递给 sigmoid 函数,产生单元 i 的一个状态。
2.AlexNet
AlextNet 由5个卷积层、5个池化层、3个全连接层、大约5000万个可调参数组成。
优点:使用了如下方法
- 防止过拟合:Dropout、数据增强。
- 非线性激活函数:ReLU。
- 大数据训练:120万 ImageNet 图像数据。
- GPU 实现、LRN规范化层的使用。
此外还有 VGGNet、GoogLeNet、ResNet 等卷积神经网络模型,这里不再一一叙述。
***讲下解决过拟合的方法。
(1)数据增强:增加训练数据是避免过拟合的好方法,并且能提升算法的准确性。当训练数据有限的时候,可以通过一些变换从已有的训练数据集中生成一些新数据。来扩大训练数据量。通常采用的变形方法以下几种:
- 水平翻转图像(又称反射变化,filp)。
- 从原始图像随机地平移变换出一些图像。
- 给图像增加一些随机的光照(又称光照、彩色变换、颜色抖动)。
(2)Dropout。以 Alexnet 为例,Alexnet 是以0.5 的概率将每个隐层神经元的输出设置为0 。以这种方式被抑制的神经元既不参加前向传播,也不参与反向传播。因此,每次输入一个样本,就相当于该神经网络尝试了一个新结构,但是所有这些结果之间共享权重。因为神经元不能依赖于其他神经元而存在,所以这种技术降低了神经元复杂的互适应关系。因此,网络需要被迫学习更为健壮的特征,这些特征在结合其他神经元的一些不同随机子集时很有用。Dropout 使收敛所需的迭代次数大致增加了一倍。
深度学习之 TensorFlow(四):卷积神经网络的更多相关文章
- TensorFlow 2.0 深度学习实战 —— 浅谈卷积神经网络 CNN
前言 上一章为大家介绍过深度学习的基础和多层感知机 MLP 的应用,本章开始将深入讲解卷积神经网络的实用场景.卷积神经网络 CNN(Convolutional Neural Networks,Conv ...
- TensorFlow深度学习实战---图像识别与卷积神经网络
全连接层网络结构:神经网络每两层之间的所有结点都是有边相连的. 卷积神经网络:1.输入层 2.卷积层:将神经网络中的每一个小块进行更加深入地分析从而得到抽象程度更高的特征. 3 池化层:可以认为将一张 ...
- SIGAI深度学习第八集 卷积神经网络2
讲授Lenet.Alexnet.VGGNet.GoogLeNet等经典的卷积神经网络.Inception模块.小尺度卷积核.1x1卷积核.使用反卷积实现卷积层可视化等. 大纲: LeNet网络 Ale ...
- SIGAI深度学习第七集 卷积神经网络1
讲授卷积神经网络核心思想.卷积层.池化层.全连接层.网络的训练.反向传播算法.随机梯度下降法.AdaGrad算法.RMSProp算法.AdaDelta算法.Adam算法.迁移学习和fine tune等 ...
- 深度学习原理与框架-卷积神经网络-cifar10分类(图片分类代码) 1.数据读入 2.模型构建 3.模型参数训练
卷积神经网络:下面要说的这个网络,由下面三层所组成 卷积网络:卷积层 + 激活层relu+ 池化层max_pool组成 神经网络:线性变化 + 激活层relu 神经网络: 线性变化(获得得分值) 代码 ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- 深度学习-使用cuda加速卷积神经网络-手写数字识别准确率99.7%
源码和运行结果 cuda:https://github.com/zhxfl/CUDA-CNN C语言版本参考自:http://eric-yuan.me/ 针对著名手写数字识别的库mnist,准确率是9 ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 4】第四课:卷积神经网络 - 高级篇
[原创 深度学习与TensorFlow 动手实践系列 - 4]第四课:卷积神经网络 - 高级篇 提纲: 1. AlexNet:现代神经网络起源 2. VGG:AlexNet增强版 3. GoogleN ...
- 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇
[原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...
- tensorflow学习笔记——图像识别与卷积神经网络
无论是之前学习的MNIST数据集还是Cifar数据集,相比真实环境下的图像识别问题,有两个最大的问题,一是现实生活中的图片分辨率要远高于32*32,而且图像的分辨率也不会是固定的.二是现实生活中的物体 ...
随机推荐
- Java JDBC封装模式
模仿DBUtils里面的一些用法,下面是一些简单的实现数据集的操作的方法 下面使用到的两个bean.首先是userbean package bean; public class user { Stri ...
- 清除行内元素之间的HTML空白
原文连接:Remove Whitespace Between Inline-Block Elements 原文日期: 2013年8月27日 翻译日期: 2013年8月28日 至今我还记得年轻是在IE6 ...
- My Upload.com product submission has been approved
This morning I got to know that My product DB Query Analyzer had been appoved by upload.com, which ...
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十二)
回到Xcode,新建Level1类,继承于CCNode. 打开Level1.m在初始化方法中添加如下方法: -(void)didLoadFromCCB{ [self initBasket]; [sel ...
- 【leetcode】经典算法题-Counting Bits
题目描述: 给定一个数字n,统计0-n之间的数字二进制的1的个数,并用数组输出 例子: For num = 5 you should return [0,1,1,2,1,2]. 要求: 算法复杂复o( ...
- Android利用ViewPager仿微信主界面-android学习之旅(78)
首先是介绍ViewPager这个控件 ,这个控件需要pagerAdapter作为容器来提供数据,同时pagerAdapter的数据源是View数组 效果图如下 部分代码如下,实现如下的方法 mPage ...
- c++中各个数据类型的大小
来哦金额各种数据类型有助于我们对这门语言的更好掌握,更好的利用之来编程,下面是一个简单的获得数据类型的大小的程序,虽然简单,但实用性却很高. #include <iostream> usi ...
- SQL2008数据表空间大小查询脚本
--尽量少用触发器,否则数据库增长很快,特别是关于登陆的数据表字段不要用出发器,一周左右能使得数据库增长1G的空间. --数据库表空间大小查询脚本 IF EXISTS (SELECT * FROM ...
- Linux下MySQL备份以及crontab定时备份
1. 备份某个数据库 ################################################################## # 备份某个数据库 ############ ...
- Useful Scripts for E-Business Suite Applications Analysts
In this Document Purpose Questions and Answers IMPORTANT: 1. How to find versions of files i ...