神经网络Package

【目前还属于草稿版,等我整个学习玩以后会重新整理】

模块Module

module定义了训练神经网络需要的所有基础方法,并且是可以序列化的抽象类。

module有两种状态变量:output和gradInput

[output] forward(input)

利用input对象计算其对应的output。通常input和output都是Tensor类型的。有时候会有例外例如table layers(Tensor的子类)。Forward之后,output变量应该被更新为新的值了。

不建议重写这个函数,二是应该去实现updateOutput(input)函数。

[gradInput] backward(input, gradOutput)

在module内进行反向传播,默认前向传播已经做过了且这个input应该和前向传播的input是一样的。否则梯度计算会出错。

同样的gradInput也是tensor类型,也有可能是table layers。

反向传播过程包括计算两种类型的梯度。

这个函数会调用下面两个函数

updateGradInput(input,gradOutput)

accGradParameters(input,gradOutput,scale).

同样的,最好不要重载backward函数,重载上面的这两个函数会好一些。

updateOutput(input)

这个函数利用当前参数和input计算output,其结果就保存在output属性。

updateGradInput(input,gradOutput)

计算这个模块的input对应的梯度,这个应用应该是在NLP中,例如词向量,它是input但是它同时是parameter,因此需要更新。

accGradParameters(input,gradOutput,scale)

计算模块的参数的梯度咯,如果一个模块没有参数,那么就不需要做这一步。这些参数对应的状态变量的名字是与模块有关的。

scale这个参数是在参数梯度集成之前要乘上去的一个因子。

type(type [,tensorCache])

可用于将所有参数转化为对应的type类型。

tensors can be provided as inputs as well as modules

模块中包含模型参数以及参数的梯度

这一点非常好,免得我们自己去求导。

weight和gradWeight是它的参数名字,它们是table类型

parameters()函数

如果自己写模块要重载这个函数。

[flatParameters,,flatGradParameters] getParameters()

这个函数返回两个tensor

不能重载这个函数。

training()

这个函数把train属性设置为true。它的好处在于对于一些特殊的模块例如dropout,在training和evaluation过程是不一样的。

evaluate()

这个函数把train设置为false。

findModules(typename)

Containers

这个类可以轻松建立复杂的神经网络。

Container是基类,

Sequential,Parallel,Concat都是继承它,DepthCOntact继承concat类。

有两个方法

add(module)

get(index)

listModules()

把网络中所有的模块都列出来,其中包括container模块,self,以及其他的组件。

Transfer function

包括Tanh(),Sigmoid()

HardTanh()

这些非线性转换函数都是element-wise的

HardShrink

module = nn.HardShrink(lambda)

相当于是一个阈值函数,绝对值大于lambda的书就是他本身,否则为0.

SoftShrink

和Hard差不多只不过这次平滑化一下。

具体公式见Torch官方文档

SoftMax

这个不用解释了

SoftMin

哈哈 居然还有这个呢

SoftPlus

保证输出地全是正数;

再有就是Sigmoid和RELU了。这个就不再一一赘述了。

网络层类型

1.简单的类型

(需要参数的)

Linear:做线性变换

SparseLinear对sparse的输入数据进行线性变换

Add 对输入数据加上一个偏置项

Mul 对输入数据乘上一个因子

CMul component-wise乘法??

CDiv 除

Euclidean 计算输入数据到k means中心店的欧氏距离

weightedEuclidean 不用多说,加权的欧氏距离

(不需要参数,自适应的)

copy 对输入进行copy 可能会进行类型转变

Narrow 在制定维度上进行narrow操作

replicate 类似于MATLAB的repmat

reshape

view

select

Max

Min

Mean

Sum

这四个函数是在制定维度上做相应地操作

Exp,Abs,Power,Square,Sqrt,这是element-wise

Normalize 对输入进行进行L_p正则化。

MM 矩阵矩阵相乘

其他的模块

BatchNormalization 对一块数据标准化

Identity 恒等函数 在paralleltable中很有用

dropout

SpatialDropout

Padding 在某一维度上补充

L1Penalty 对输入加 sparsity

Table Layers

使用table构建更加复杂的网络结构

table是container模块的子模块

concatTable

Torch7学习笔记(二)nn Package的更多相关文章

  1. torch学习笔记(二) nn类结构-Linear

    Linear 是module的子类,是参数化module的一种,与其名称一样,表示着一种线性变换. 创建 parent 的init函数 Linear的创建需要两个参数,inputSize 和 outp ...

  2. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  3. JMX学习笔记(二)-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

  4. Java IO学习笔记二

    Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...

  5. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

  6. Go语言学习笔记二: 变量

    Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...

  7. amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules

    amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...

  8. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  9. amazeui学习笔记二(进阶开发1)--项目结构structure

    amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...

  10. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

随机推荐

  1. 不得不说的wepapi 优化

    1:在你的ASP.NET Web API中使用GZIP 或 Deflate .对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式.这是一个非常有必要使用的功能,你可以查看更多关于压缩的文章在我 ...

  2. java 反序列化PHP

    由于本人所在开发的项目,前期是由php完成的,这里需要对数据库中php序列化的字符串进行反序列化. 1.引入maven依赖 <!--反序列化 php--> <dependency&g ...

  3. css清除浮动大全共8种方法

    原文链接http://www.jb51.net/css/173023.html 清除浮动是每一个 web前台设计师必须掌握的机能.css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同 ...

  4. October 30th Week 45th Sunday 2016

    Genius is nothing but labor and diligence. 天才不过是勤奋而已. Labor and diligence are the requirements for s ...

  5. 【转】Caffe初试(十)命令行解析

    caffe的运行提供三种接口:C++接口(命令行).Python接口和matlab接口.本文先对命令行进行解析,后续会依次介绍其它两种接口. caffe的C++主程序(caffe.cpp)放在根目录下 ...

  6. C# Cookie

    1  推荐使用 is 或 as 操作符而不是强制 2  编码风格:Tab ——改成两个 C# 文档注释的快捷键  (将配置表压缩,从压缩文件中查找xml配置表 这个是指Unity项目上面)   尽量使 ...

  7. Datazen地图Chart自定义数据

    此篇介绍如何将数据关联到Datazen地图图表.我们会将数据库中的数据映射到地图上. 首先查看下默认地图图表绑定的数据.以下是系统自带的美国地图数据,主要有两列,一列为地名,一列为度量数据.地图会根据 ...

  8. Hadoop中的问题排查思路

    一.概述: 在实际使用hadoop的过程中,由于涉及到多台服务器.每台机器上可能还有多个服务等.所以当集群环境出现问题时,快速定位到错误出现的地方尤为重要. 在排查错误的过程中,基本上就是通过既有的工 ...

  9. PL/SQL客户端中执行insert语句,插入中文乱码

    问题描述:在PL/SQL客户端中执行insert语句,插入中文乱码 解决方案: 1.执行脚本 select userenv('language') from dual;    结果为AMERICAN_ ...

  10. MIT 6.828 JOS学习笔记13 Exercise 1.10

    Lab 1 Exercise 10 为了能够更好的了解在x86上的C程序调用过程的细节,我们首先找到在obj/kern/kern.asm中test_backtrace子程序的地址, 设置断点,并且探讨 ...