使用随机梯度下降训练神经网络

StochasticGradient是一个比较高层次的类,它接受两个参数,module和criterion,前者是模型结构,后者是损失函数的类型。这个类本身有一些参数:

LearningRate: 这是学习率,不用多说

LearningRateDecay: 学习率衰减,current_learning_rate =learningRate / (1 + iteration * learningRateDecay)

maxIteration: 最大迭代次数

shuffleIndices 是否洗数据

hookExample 这个比较神奇,是一个钩子函数,具体功能不详。

hookIteration: 同样的。

如何使用StochasticGradient来训练神经网络?

只有两步

  1. 准备好你的数据
  2. 设计好神经网络结构和loss function

同样的用官方文档的一个例子:

准备数据集:

dataset={};

function dataset:size() return 100 end -- 100 examples

for i=1,dataset:size() do

local input = torch.randn(2);     -- normally distributed example in 2d

local output = torch.Tensor(1);

if input[1]*input[2]>0 then     -- calculate label for XOR function

output[1] = -1;

else

output[1] = 1

end

dataset[i] = {input, output}

end

定义神经网络:

require "nn"

mlp = nn.Sequential();  -- make a multi-layer perceptron

inputs = 2; outputs = 1; HUs = 20; -- parameters

mlp:add(nn.Linear(inputs, HUs))

mlp:add(nn.Tanh())

mlp:add(nn.Linear(HUs, outputs))

训练网络:

criterion = nn.MSECriterion()

trainer = nn.StochasticGradient(mlp, criterion)

trainer.learningRate = 0.01

trainer:train(dataset)

同样的,如果不使用stochasticGradient类,手动训练神经网络也是可以的。

这里举得例子是训练XOR问题。

带有一层隐藏层的神经网络:

require "nn"

mlp = nn.Sequential();  -- make a multi-layer perceptron

inputs = 2; outputs = 1; HUs = 20; -- parameters

mlp:add(nn.Linear(inputs, HUs))

mlp:add(nn.Tanh())

mlp:add(nn.Linear(HUs, outputs))

Loss function

Criterion = nn.MSECriterion()

Training:

for i = 1,2500 do

-- random sample(生成数据集)

local input= torch.randn(2);     -- normally distributed example in 2d

local output= torch.Tensor(1);

if input[1]*input[2] > 0 then  -- calculate label for XOR function

output[1] = -1

else

output[1] = 1

end

-- 这里需要注意的是criterion的forward和nn的forward的调用顺序

-- feed it to the neural network and the criterion

criterion:forward(mlp:forward(input), output)

-- train over this example in 3 steps

-- (1) zero the accumulation of the gradients

mlp:zeroGradParameters()

-- (2) accumulate gradients

mlp:backward(input, criterion:backward(mlp.output, output))

-- (3) update parameters with a 0.01 learning rate

mlp:updateParameters(0.01)

end

Torch7学习笔记(四)StochasticGradient的更多相关文章

  1. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  2. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  3. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

  4. Learning ROS for Robotics Programming Second Edition学习笔记(四) indigo devices

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS for Robotics Pr ...

  5. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  7. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  8. python3.4学习笔记(四) 3.x和2.x的区别,持续更新

    python3.4学习笔记(四) 3.x和2.x的区别 在2.x中:print html,3.x中必须改成:print(html) import urllib2ImportError: No modu ...

  9. Go语言学习笔记四: 运算符

    Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...

  10. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

随机推荐

  1. MVC中使用Entity Framework 基于方法的查询学习笔记 (二)

    解释,不解释: 紧接上文,我们在Visual Studio2012中看到系统为我们自动创建的视图(View)文件Index.cshtml中,开头有如下这句话: @model IEnumerable&l ...

  2. 移动端H5页面高清多屏适配方案

    背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范 ...

  3. CornerStone的使用

    俗话说:"工欲善其事必先利其器": 对于我们程序员来说,不管你是大神,还是小鱼小虾,进入公司之后,都用过源码管理工具,不然你就不是一个合格的程序员,现在各个公司用于源码管理工具通常 ...

  4. Python实现简单的Web(续)

    写的有点乱..希望大神指教~~Python的缩进可真的将我缠了好久,想起我们班大神说缩进也是代码啊..修改之前的代码来显示请求的信息,同时重新整理一下代码: class RequestHandler( ...

  5. 关于chart.js 设置canvas的宽度为父级元素的宽度的百分百 以及 X轴上面刻度数据太多如何处理

    今天在做一个数据统计的界面的时候,需要做折线统计图,在网上找了一圈发现数据统计的插件还是不少的,本着轻量级的的原则选择了Chart.js,后来在做的过程中便遇到两个问题,以此记录下来,和刚刚接触前端的 ...

  6. 使用NPOI读取Excel报错ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature

    写了一个小程序利用NPOI来读取Excel,弹出这样的报错: ICSharpCode.SharpZipLib.Zip.ZipException:Wrong Local header signature ...

  7. webstorm基础使用总结

    webstorm基础使用总结(不仅仅是一堆快捷方式) 注:原文链接: 水车 :  本次写的内容是我想到那个就写那个,都是本人平时写代码的时候的一些习惯,未必是最好的,贵在交流! 1:  shift+e ...

  8. php.ini 配置详解【转载】

    [PHP]engine = On   #是否启用PHP解析引擎zend.ze1_compatibility_mode = Off #是否在Last-Modified应答头中放置该PHP脚本的最后修改时 ...

  9. linux 如何查找io的进程

    [root@NB ok]# echo chenlin|base64;echo Y2hlbmxpbgo= [root@NB ok]# yum search iotop Loaded plugins: f ...

  10. java反射详解

    本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解. 下面开始正文. [案例1]通过一个对象 ...