神经网络模型

【深度学习】深入理解Batch Normalization批标准化

霸气de小男生 提交于 2019-11-28 15:38:33
这几天面试经常被问到BN层的原理,虽然回答上来了,但还是感觉答得不是很好,今天仔细研究了一下Batch Normalization的原理,以下为参考网上几篇文章总结得出。   Batch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性。虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个 经验领先于理论分析 的偏经验的一门学问。本文是对论文《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》的导读。   机器学习领域有个很重要的假设: IID独立同分布假设 ,就是假设训练数据和测试数据是满足相同分布的,这是通过训练数据获得的模型能够在测试集获得好的效果的一个基本保障。那BatchNorm的作用是什么呢? BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布的。   接下来一步一步的理解什么是BN。   为什么深度神经网络 随着网络深度加深,训练起来越困难,收敛越来越慢? 这是个在DL领域很接近本质的好问题。很多论文都是解决这个问题的,比如ReLU激活函数,再比如Residual Network

神经网络和深度学习简史(一)

眉间皱痕 提交于 2019-11-28 14:59:41
原文引用 大专栏 https://www.dazhuanlan.com/2019/08/26/5d63420a6a604/ 本部分介绍神经网络和感知机在1958年的诞生,和70年代的寒冬和1986年反向传播让它重新受欢迎的历史。 关于这篇博文 从事神经网络和深度学习也有一两年的时间了,但一直没有从历史发展脉络上把握这波技术浪潮,偶然发现了这篇有斯坦福大学的 26 岁学生 Andrey Kurenkov 写的博文,看后颇有收获,特此重新整理一下,以供加深印象。好了,正文开始: 第一部分:神经网络的诞生和寒冬 深度学习掀起海啸 如今,深度学习浪潮拍打计算机语言的海岸已有好几年,但是,2015年似乎才是这场海啸全力冲击自然语言处理(NLP)会议的一年。—— Dr. Christopher D. Manning, Dec 2015 1 整个研究领域的成熟方法已经迅速被新发现超越,这句话听起来有些夸大其词,就像是说它被“海啸”袭击了一样。但是,这种灾难性的形容的确可以用来描述深度学习在过去几年中的异军突起——显著改善人们对解决人工智能最难问题方法的驾驭能力,吸引工业巨人(比如谷歌等)的大量投资,研究论文的指数式增长(以及机器学习的研究生生源上升)。在听了数节机器学习课堂,甚至在本科研究中使用它以后,我不禁好奇:这个新的“深度学习”会不会是一个幻想,抑或上世纪80年代已经研发出来的

卷积神经网络概述

▼魔方 西西 提交于 2019-11-28 11:15:54
原文: http://blog.gqylpy.com/gqy/418 置顶:来自一名75后老程序员的武林秘籍——必读 (博主推荐) 来,先呈上武林秘籍链接: http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我会画原理图,会画 PCB,会模拟,会数字!玩过 PLC,玩过单片机,会用汇编,会用 C!玩过 ARM,比如 PLC,STM32,和时下正在起飞的 NXP RT1052!搞过 DSP,比如 TMS320F28335!搞过 FPGA,不管 Xilinx 还是 Altera,也不管是 Verilog 还是 VHDL,或者直接画数字电路图!我懂嵌入式系统,比如 uCOS 和 Linux!我懂开源的硬件,比如 Arduino 和树莓派!我也搞软件,学了一堆上位机的语言C#,JAVA,Python,Kotlin,Swift!会写爬虫工具,又自学写APP,不管Android 还是 IOS! 可是这一切有什么用呢?土鸡瓦狗!不值一提!干技术的永远就是最苦逼的那个人! 我相信看到这里的你,应该是个 IT

卷积神经网络实例---模型搭建、实时数据扩充、loss、acc曲线绘制

 ̄綄美尐妖づ 提交于 2019-11-28 10:40:06
用keras 实现cifar10 以下是代码 1 # -*- coding: utf-8 -*- 2 __author__ = ' Administrator ' 3 4 5 from keras.datasets import cifar10 6 from keras.utils import np_utils 7 from keras.models import Sequential 8 from keras.layers import Convolution2D, MaxPooling2D 9 from keras.layers import Dense, Dropout, Activation, Flatten 10 from keras.optimizers import SGD 11 from keras.preprocessing.image import ImageDataGenerator 12 import matplotlib.pyplot as plt 13 14 # 下载数据 15 (X_train, y_train), (X_test, y_test) = cifar10.load_data() 16 print ( ' X_train shape: ' , X_train.shape) 17 print (X_train.shape[2], '

数据增强在卷积神经网络中的应用

别说谁变了你拦得住时间么 提交于 2019-11-28 10:38:21
这一篇博客主要讨论在用卷积神经网络进行图像识别或者目标检测时的数据增强手段,并讨论其作用。 首先整理两篇比较有代表性的论文里的数据增强,再说说我自己工作中使用的数据增强,最后讨论这些数据增强的意义(我个人的理解)。 个人觉得,如果你的网络设置的没什么问题,代码也没写错,但是跑出来的效果不尽如人意,比如你希望有80%的准确率,但实际只有70%,那你就应该试一试数据增强,这绝对比你调模型的参数或者结构要有效得多。 而且在实际中,打标数据是很珍贵的,数量可能根本没有达到能够让你训练出一个满足要求的神经网络。这时候数据增强就会显得特别重要。 首先介绍的是2012年令深度学习大放异彩的alexnet中的数据增强,alexnet在2012年的imagenet大赛中获得了冠军,首次把深度学习使用到了图片分类领域,并取得极大成功。 alexnet的输入是一张224x224x3的图片,imagenet的原始图片大小是256x256x3的,作者做了如下数据增强: 训练:原来的图片是256x256,现在依次裁剪出224x224的图片,这样横向有256-224次移动,竖着也有这么多,再加上左右的翻转镜像,相当于把数据集扩大了(256-224)x(256-224)x2=2048倍。 预测:选择一张图片的四个角的224x224加上中间的224x224(加上左右镜像的)一共10张图片的平均值做结果。

单机玩转神经网络架构搜索(NAS) - Auto-Keras学习笔记

生来就可爱ヽ(ⅴ<●) 提交于 2019-11-28 10:36:30
介绍 AutoML这个topic在机器学习领域越来越火,新的研究成果也是层出不穷。在网络架构(NAS),模型压缩(AMC),数据增强(AutoAugment),优化器设计(Neural Optimizer Search),平台相关优化(AutoTVM)等领域,我们都可以看到相应的研究成果表明机器学习可以达到比人肉调参更优的结果。自动化方法正在逐步替代调参工。相信不久的将来,我们面对一个场景,只要喂数据,其他的由机器一条龙完成,而且还能比人肉优化出来人牛X。它们本质上都是大规模空间中的最优参数搜索问题,因此很多方法基本都是相通的。其中网络架构的搜索(Neural Architecture Search, NAS)一直是业界主要研究对象,各种云服务也开始推出相关的服务。一开始的时候,这项技术需要依赖巨大的计算成本。随着各种改进,它的算力需求大大减少,使得它开始有可能飞入寻常百姓家。之前写过一篇简单讨论了相关的技术 《神经网络架构搜索(Neural Architecture Search)杂谈》 ,这里就不重复了。本文主要学习一下 Auto-Keras 这个开源项目中的实现,使用它我们可以在本地进行网络架构搜索。官方有一篇相关的paper介绍- Auto-Keras: An Efficient Neural Architecture Search System 。 安装过程很简单,详见

Keras神经网络的学习与使用(2)

爱⌒轻易说出口 提交于 2019-11-28 10:35:54
Keras中函数与优化器的学习 激活函数 Sigmoid函数 防止梯度弥散现象的发生 Softmax激活函数 ReLU函数 Keras激活函数的使用 优化器 SGD优化器 学习率 Adadelta优化器 损失函数 均方误差 交叉熵损失函数 激活函数 机器学习模型的学习过程就是一个不断地通过数据集来修正自身数学模型中参数的过程。 引入激活函数可以增加神经网络模型的 非线性 ,以便增强对样本非线性关系的拟合能力。如果没有激活函数,那么神经网络的每一层都只相当于矩阵相乘,即便叠加了若干层,也只相当于将这些矩阵连续相乘而已。 激活函数有很多,例如ReLU、Sigmoid、tanh、elu等。 Sigmoid函数 Sigmoid激活函数是一个非线性函数,它的定义域可以是全体实数,而值域却是(0, 1)。也就是说,使用Sigmoid函数通常用在回归预测和二分类(即按照是否大于0.5进行分类)模型的输出层中。 Sigmoid函数的公式如下: S ( x ) = 1 1 + e − x S(x) = \frac{1}{1+e^{-x}} S ( x ) = 1 + e − x 1 ​ 该函数在python下画图 import numpy as np from math import * import matplotlib . pyplot as plt x = np . arange ( - 10

神经网络案例推导

筅森魡賤 提交于 2019-11-28 08:18:58
现在终于理解我们高中数学老师说的话了,计算不行,说明数学不行,数学不行能力不行,数学好才是真正的好!!!哈哈哈。 欢迎访问我的博客 Sky’s blog 这是典型的三层神经网络的基本构成,Layer L1是输入层,Layer L2是隐含层,Layer L3是隐含层,我们现在手里有一堆数据{x1,x2,x3,…,xn},输出也是一堆数据{y1,y2,y3,…,yn},现在要他们在隐含层做某种变换,让你把数据灌进去后得到你期望的输出。 在这里,通过对上图简单的案例进行数学推导,激活函数默认为sigmoid函数(注:神经网络的基础知识可以参考Poll的笔记:[ Mechine Learning & Algorithm] 神经网络基础 ) 一、前向传播 1.输入层---->隐含层 **计算神经元的输入加权和 计算神经元 h1、h2 的输出 2.隐含层---->输出层 **计算输出神经元o1、o2的值 至此,前向传导传播结束。 二、反向传播 1.计算总误差 2.隐藏层----->输出层权值更新 同理可求 权值跟新 3.隐藏层---->输出层权值更新 同理可求 权值跟新 权值更新后测试数据 例子 import numpy as np #激励函数与其偏导数 def tanh ( x ) : return np . tanh ( x ) def tanh_derivative ( x ) :

深度学习之长短期记忆网络LSTM理解

五迷三道 提交于 2019-11-28 05:55:15
转自博客 http://colah.github.io/posts/2015-08-Understanding-LSTMs/ ,大致翻译了一下,大神讲的很好。 RNN Networks 人类不会每时每刻都开始思考。当你阅读这篇文章时,你会根据你对之前单词的理解来理解每个单词。你不会扔掉所有东西,然后再从头开始思考。你的思想有持久性。 传统的神经网络无法做到这一点,这似乎是一个主要的缺点。例如, 目前还不清楚传统的神经网络如何利用其对电影中先前事件的推理来为后来的事件提供信息。 循环神经网络解决了这个问题。它们是带有循环的网络,允许信息持续存在。 递归神经网络具有循环。 在上图中,一块神经网络A,接受一些输入 并输出值 。循环允许信息从网络的一个步骤传递到下一个步骤。 这些循环使得循环神经网络看起来有点神秘。但是,如果你多想一点,事实证明它们与普通的神经网络并没有什么不同。可以将循环神经网络视为同一网络的多个副本,每个副本都将消息传递给后继者。考虑如果我们展开循环会发生什么: 展开的递归神经网络。 这种类似链的性质表明,递归神经网络与序列和列表密切相关。它们是用于此类数据的神经网络的自然架构。 他们肯定会被使用!在过去几年中,将RNN应用于各种问题取得了令人难以置信的成功:语音识别,语言建模,翻译,图像字幕......这个列表还在继续。我将讨论使用RNNs可以实现的惊人壮举

如何选择神经网络的超参数

房东的猫 提交于 2019-11-28 05:17:50
原 十、如何选择神经网络的超参数 2017年08月18日 10:33:06 独孤呆博 阅读数 21041 版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/dugudaibo/article/details/77366245 本博客主要内容为图书 《神经网络与深度学习》 和National Taiwan University (NTU)林轩田老师的 《Machine Learning》 的学习笔记,因此在全文中对它们多次引用。初出茅庐,学艺不精,有不足之处还望大家不吝赐教。   在之前的部分,采用梯度下降或者随机梯度下降等方法优化神经网络时,其中许多的超参数都已经给定了某一个值,在这一节中将讨论如何选择神经网络的超参数。 1. 神经网络的超参数分类   神经网路中的超参数主要包括1. 学习率 η ,2. 正则化参数 λ ,3. 神经网络的层数 L ,4. 每一个隐层中神经元的个数 j ,5. 学习的回合数 E p o c h ,6. 小批量数据 m i n i b a t c h 的大小,7. 输出神经元的编码方式,8. 代价函数的选择,9. 权重初始化的方法,10. 神经元激活函数的种类,11.参加训练模型数据的规模 这十一类超参数。