神经网络算法

**深度学习调参技巧**

匿名 (未验证) 提交于 2019-12-02 22:56:40
(网上经验总结) 参考1: https://blog.csdn.net/chenzhi1992/article/details/52905569 获取数据: 确保要有高质量的输入/输出数据集,这个数据集要足够大、具有代表性以及拥有相对清楚的标签。 预处理: (数据保持零均值和较小的方差)将数据进行集中,也就是要使数据均值为0,从而使每个维度的每次变动为1。有时,当输入的维度随量级排序变化时,最好使用那个维度的log(1+x)。基本上,重要的是要找到一个0值的可信编码以及自然分界的维度。(如果x的均值很大(例如100),那么权值的更新将会非常大,并且是相互关联的,这使得学习变得低劣而缓慢。) 批处理: 在如今的计算机上每次只执行一个训练样本是很低效的。反之如果进行的是128个例子的批处理,效率将大幅提高,因为其输出量是非常可观的。事实上使用数量级为1的批处理效果不错,这不仅可获得性能的提升同时可降低过度拟合;不过这有可能会被大型批处理超越。但不要使用过大的批处理,因为有可能导致低效和过多过度拟合。所以我的建议是:根据硬件配置选取适合的批处理规模,量力而为会更加高效。 梯度归一化: 根据批处理的大小来拆分梯度。因为如果对批处理进行倍增(或倍减),无需改变学习率(无论如何,不要太多)。 学习率计划: 从一个正常大小的学习率(LR)开始,朝着终点不断缩小。 学习率计划:

24、神经网络优化算法比较

痴心易碎 提交于 2019-12-02 15:56:21
为高效找到使损失函数的值最小的参数,关于最优化(optimization)提了很多方法。 其中包括: SGD(stochastic gradient descent,随机梯度下降) Momentum(冲量算法) Adagrad Adam 各优化算法比较实验(python) # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from collections import OrderedDict class SGD: """随机梯度下降法(Stochastic Gradient Descent)""" def __init__(self, lr=0.01): self.lr = lr def update(self, params, grads): for key in params.keys(): params[key] -= self.lr * grads[key] class Momentum: """Momentum SGD""" def __init__(self, lr=0.01, momentum=0.9): self.lr = lr self.momentum = momentum self.v = None def update(self, params, grads)

(转)深度学习入门路线

萝らか妹 提交于 2019-12-02 10:49:40
/*------深度学习理论------------------------**/ 1. 深度学习介绍、全连接神经网络 为什么要做深读学习而不是宽度学习? 2. 反向传播算法 BP算法手工推导 3. 使用Keras实现全连接神经网络完成手写数字识别 4. mini-batch Gradient Descent 5. 神经网络的优化(0)----概述 神经网路的优化(1)----激活函数:梯度消失问题、ReLU、Maxout 神经网络的优化(2)----优化器、自适应学习率:Adagrad、RMSProp、Momentum、Adam 神经网络的优化(3)----Early Stopping 神经网络的优化(4)----正则化 神经网络的优化(5)----Dropout 6. 卷积神经网络 CNN结构演化 CNN的原理 怎么用Keras实现CNN CNN学到的到底是啥? Lenet-5 VGG GoogleNet 7. 循环神经网络 RNN的原理 LSTM /*--------环境搭建及使用--------------------**/ ubuntu18.10 + RTX2080Ti + CUDA10.0 + cuDNN7.5.0 + Anaconda(conda 4.5.12) + TensorFlow-gpu1.13.1 安装 各种环境查看 常见问题及解决 ubuntu16.04

卷积神经网络基本概念(卷积篇 01)

我是研究僧i 提交于 2019-12-01 18:45:17
Computer Vision Theory CNN Part 1 简介 1.1 我先后在以下场景下见到过卷积 微分方程 傅立叶变换及其应用 概率论 卷积神经网 1.2 相关阅读 推荐一下 Christopher Olah 的理解卷积的blog http://colah.github.io/posts/2014-07-Understanding-Convolutions/ 数学论证 https://www.dsprelated.com/freebooks/mdft/Convolution.html 1.3 本文将介绍卷积在计算机图像处理上的应用,所以限定讨论条件 离散的 2-维卷积(注:2-维的卷积相当于depth=1的3-维的卷积) 篇幅有限具体的数学和理解请参考相关阅读 Part 2 原理和代码实现 2.1 四种方式简单介绍 无损精度算法 2.1.1滑动窗口 最直观的方法 大规模加速比较困难 某些特定场景下速度比较快 2.1.2 im2col 私以为最主流的实现方式(caffe/MXNet 等使用的是这种方式) 一般来说速度较快(空间换时间) 卷积过程转化成了GEMM过程(被各种极致优化) 算法: 将没有个需要做卷积的矩阵平摊为一个一维向量 将所有的向量组成新的矩阵 新矩阵和kernal做矩阵乘法 得到结果 有损精度算法 FFT/Winograd的卷积算法,它们都是通过:

ex3 多分类和神经网络

倾然丶 夕夏残阳落幕 提交于 2019-12-01 16:10:42
介绍 在本练习中,您将实现一对多逻辑回归和神经识别手写数字的网络。在开始编程之前练习,我们强烈建议观看视频讲座并完成相关主题的复习问题。要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目录。如果需要,请在开始本练习之前使用octave/matlab中的cd命令更改到此目录。您也可以在课程网站的“环境设置说明”中找到安装Octave/Matlab的说明。 本练习中包含的文件 ex3.m-octave/Matlab脚本,它引导您完成第1部分 ex3 nn.m-octave/matlab脚本,它引导您完成第2部分 ex3data1.mat-手写数字训练集 ex3weights.mat-神经网络练习的初始权重 submit.m-将解决方案发送到我们服务器的提交脚本 displaydata.m-帮助可视化数据集的函数 fmincg.m-函数最小化例程(类似于fminunc) sigmoid-S形函数 [*]lrcostfunction.m-逻辑回归成本函数 [*]one vs all.m-训练一对多分类器 [*]PredictOneVsall.m-使用一对多分类进行预测 [*]predict.m-神经网络预测功能 *表示需要完成的文件 在整个练习中,您将使用脚本ex3.m和ex3 nn.m。这些脚本为问题设置数据集,并调用要编写的函数。不需要修改这些脚本

9、神经网络的学习

孤者浪人 提交于 2019-12-01 12:44:53
九、神经网络的学习(Neural Networks: Learning) 9.1 代价函数 参考视频: 9 - 1 - Cost Function (7 min).mkv 首先引入一些便于稍后讨论的新标记方法: 假设神经网络的训练样本有 m个,每个包含一组输入 x 和一组输出信号 y , L 表示神经网络层数 S I 表示每层的neuron个数( S l 表示输出层神经元个数), S L 代表最后一层中处理单元的个数。 将神经网络的分类定义为两种情况:二类分类和多类分类, 二类分类: S L = 0 , y = 0 o r S L =1,y=1各表示一类; K 类分类:S L = k , y i = 1 SL=k,yi=1表示分到第 i 类; ( k > 2 ) 我们回顾逻辑回归问题中我们的代价函数为: 在逻辑回归中,我们只有一个输出变量,又称标量(scalar),也只有一个因变量 y ,但是在神经网络中,我们可以有很多输出变量,我们的 hθ(x)是一个维度为 K 的向量,并且我们训练集中的因变量也是同样维度的一个向量 ,因此我们的代价函数会比逻辑回归更加复杂一些,为: h θ ( x ) ∈ R K ,( h θ (x)) i = i t h output 这个看起来复杂很多的代价函数背后的思想还是一样的,我们希望通过代价函数来观察算法预测的结果与真实情况的误差有多大

神经网络基础知识

我与影子孤独终老i 提交于 2019-12-01 06:16:35
1、前馈神经网络 前馈神经网络描述的是网络的结构,是指每一层的神经元只接受前一层神经元的输入,并且输出到下一层。 2、BP神经网络 百度百科:BP神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络。BP即Back Peopagation,就是常用的反向传播算法。 3、MLP MLP是多层感知机也被称为多层神经网络,是一种前向结构,包括输入层、隐藏层和输出层。至少三层结构(即隐藏层只有一层网络),如图所示 4、CNN CNN就是著名的卷积神经网络,是一种前馈神经网络。CNN不同于前面的网络只有线性连接,CNN包括卷积(convolution)操作,汇合(pooling)操作和非线性激活函数映射(即线性连接)。经典的CNN网络有Alex-Net、VGG-Nets、Network-In-Network等 5、RNN RNN是循环神经网络 6、激活函数 激活函数又称为非线性映射函数,将神经元的输入映射到输出。常用的激活函数包括:Sigmoid型函数、tanh(x)型函数、Relu(修正线性单元)、Leaky Relu、参数化Relu、随机化Relu和ELU(指数化线性单元) 7、目标函数 目标函数是计算预测结果和真是结果的误差。目标函数可以分为分类任务的目标函数和回归任务的目标函数 分类任务的目标函数包括:交叉熵损失函数、合页损失函数、坡道损失函数、大间隔交叉熵损失函数、中心损失函数

深度学习入门初步总结

▼魔方 西西 提交于 2019-11-30 19:55:51
深度学习入门初步总结 前言 在学习深度学习之前,从某乎上看了相关的学习路线,又通过师兄们的请教,最后选择了在linux环境下,用python进行代码的编写。由于自己在这之前,对linux没有接触过,所以在安装Ubuntu以及在环境安装下还是走了不少弯路,后续会把相关的安装教程也写在博客中。在学习之前,可以说自己真的还是个小白,很多东西都不会,望以后可以和大家多多交流,一些想法可能不正确,望各位也能指出来。 一、技术储备 python基本语法 由于自己之前学过python,在这里就不多做总结了 Numpy库 首先,numpy是python的外部库,支持大量的维度数组与矩阵运算以及大量的数学函数库。别人封装好的东西为什么不用?不过在有些库用之前,最好去扒一扒它的底层,不要仅仅停留在会用上,不然太容易被淘汰了。 然后,numpy库可以直接通过pip3安装,下面这条命令即可 sudo apt-get install python-numpy 其次,学会numpy的几条基本语法,其它的在有需要的时候再去问度娘,下面归纳几个经常会用到的语法。 import numpy as np np.empty([3,2], dtype = int) #创建一个空的3行2列的矩阵,dtype为指定类型,默认为float类型 np.zeros(5) #创建一个长度为5的数组 np.zeros_like(x)

机器学习之卷积神经网络CNN

只谈情不闲聊 提交于 2019-11-30 13:22:51
卷积神经网络CNN(入门认知) CNN的目的:特征提取 层次:卷积层 .池化层 .输出层 卷积层 :利用局部特征(卷积核),去计算出目标的 整体特征情况。 上图中的 各种X ,我们可以提取其中的几个特征作为卷积核。下图中选择红框框起来的作为特征。 所以我们可以得到三个 卷积核(也称为过滤器) : 卷积运算: 矩阵对应位子的乘法运算,然后选择平均值填入 feature map 图中。(如下图所示) 将目标与卷积核分别进行卷积运算,就可以 一个feature map,比如这里三个卷积核,最后会有三层的 feature map被得到。 所以经过卷积运算,可以将目标数据缩小,上图中9x9 的目标,卷积后 变成 7x7了。完整动态图见下方 激励层Relu: 获取特征图中 关联性大的数据,将关联性小的 都直接设置为0 数学公式是:f(X)=max(0,X) 池化层pooling (采样):压缩数据 虽然进行卷积操作已经使得数据变小了一点,但是还是不够小。需要使用到池化层,池化的方法有 最大池化(取最大值)和平均池化(取最小值)。下图所示的就是最大池化,在2x2的池化窗口中,选择一个最大的数值 填入到新的 特征图(feature mao)中。 为什么可以这样压缩?因为CNN想要的是知道有没有匹配的特征,不需要知道这个特征在那个位置匹配,所以这样压缩还是可以知道有匹配的数据以及其程度。 1

CNN反向传播更新权值

那年仲夏 提交于 2019-11-30 05:09:40
背景 反向传播 (Backpropagation)是训练神经网络最通用的方法之一,网上有许多文章尝试解释 反向传播 是如何工作的,但是很少有包括真实数字的例子,这篇博文尝试通过离散的数据解释它是怎样工作的。 Python实现的反向传播 你能使用Python来实现 反向传播 ,我曾经在 this Github repo 上实现了 反向传播 算法。 反向传播的可视化 显示神经网络学习时相互作用的可视化,检查我的 Neural Network visualization 。 另外的资源 如果你发现这个教程对你有用并且想继续学习神经网络以及它的应用,我强烈建议你看Adrian Rosebrock优秀的教程 Getting Started with Deep Learning and Python 。 概述 对于这个教程,我们将使用2个输入神经元、2个隐含层神经元以及2个输出层神经元组成一个神经网络,另外,隐含层和输出层神经元各包含一个偏差。 这是基本结构: 目的让神经网络工作,我们对 权重 、 偏差 和训练的输入/输出设置一个初始值: 反向传播 的目的是优化权重,以便于让神经网络学习怎样正确的把任意的输入映射到输出中。 这篇教程的剩余部分我们将要和单一的训练集工作:输入0.05和0.10,我们想要神经网络输出0.01和0.99。 前向反馈 为了开始,当前给定权重和偏差以及输入值0.05和0