神经网络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. Docker - Dockerizing applications: A “Hello world”

    1. 在Docker容器(container)运行Hello world $ docker run ubuntu /bin/echo 'Hello world' docker run - 运行一个容器 ...

  2. CSS3中的px,em,rem,vh,vw辨析

    1.px:像素,精确显示 2.em:继承父类字体的大小,相当于"倍",如:浏览器默认字体大小为16px=1em,始终按照div继承来的字体大小显示,进场用于移动端 em换算工具:h ...

  3. Selenium Xpath Tutorials - Identifying xpath for element with examples to use in selenium

    Xpath in selenium is close to must required. XPath is element locator and you need to provide xpath ...

  4. css文件 引用后不起作用

    你如果填写的是相对路径,那么检查一下路径是否正确. 如果相对路径正确,那么有可能你的css样式的层级错误(概率也不低),比如说图片的引用路径发生了改变等等. 要看你预览的浏览器是什么,我经常遇到IE预 ...

  5. 使用Visual Leak Detector for Visual C++ 捕捉内存泄露

    什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...

  6. git 修改注释信息

    1. push 之前 先看看自己提交过多少次,然后执行 git rebase -i HEAD~数字(你要修改你的第几次提交) 接下来执行,修改注释 git commit --amend 修改完注释之后 ...

  7. jquery中on绑定事件

    之前项目中动态创建的标签元素  在绑定事件的时候  都是无效  无论如何都不能触发 eg:在页面加载完成之后   再由脚本动态创建的<div>元素  在绑定事件的时候 例如click事件 ...

  8. css flex布局

    关于flex布局的一些简单用法 效果(下图) 实现代码: <!--html--> <div class="wrap"> <div class=&quo ...

  9. Oracle中生成随机数的函数(转载)

    在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...

  10. HDU 5795 A Simple Nim 打表求SG函数的规律

    A Simple Nim Problem Description   Two players take turns picking candies from n heaps,the player wh ...