Torch7学习笔记(二)nn Package
神经网络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的更多相关文章
- torch学习笔记(二) nn类结构-Linear
Linear 是module的子类,是参数化module的一种,与其名称一样,表示着一种线性变换. 创建 parent 的init函数 Linear的创建需要两个参数,inputSize 和 outp ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- JMX学习笔记(二)-Notification
Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...
- Java IO学习笔记二
Java IO学习笔记二 流的概念 在程序中所有的数据都是以流的方式进行传输或保存的,程序需要数据的时候要使用输入流读取数据,而当程序需要将一些数据保存起来的时候,就要使用输出流完成. 程序中的输入输 ...
- 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记
注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...
- Go语言学习笔记二: 变量
Go语言学习笔记二: 变量 今天又学了一招如何查看go的版本的命令:go version.另外上一个笔记中的代码还可以使用go run hello.go来运行,只是这种方式不会生成exe文件. 定义变 ...
- amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules
amazeui学习笔记二(进阶开发5)--Web 组件开发规范Rules 一.总结 1.见名知意:见那些class名字知意,见函数名知意,见文件名知意 例如(HISTORY.md Web 组件更新历史 ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
- amazeui学习笔记二(进阶开发1)--项目结构structure
amazeui学习笔记二(进阶开发1)--项目结构structure 一.总结 1.项目结构:是说的amazeui在github上面的项目结构,二次开发amazeui用 二.项目结构structure ...
- WPF的Binding学习笔记(二)
原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...
随机推荐
- Docker - Dockerizing applications: A “Hello world”
1. 在Docker容器(container)运行Hello world $ docker run ubuntu /bin/echo 'Hello world' docker run - 运行一个容器 ...
- CSS3中的px,em,rem,vh,vw辨析
1.px:像素,精确显示 2.em:继承父类字体的大小,相当于"倍",如:浏览器默认字体大小为16px=1em,始终按照div继承来的字体大小显示,进场用于移动端 em换算工具:h ...
- 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 ...
- css文件 引用后不起作用
你如果填写的是相对路径,那么检查一下路径是否正确. 如果相对路径正确,那么有可能你的css样式的层级错误(概率也不低),比如说图片的引用路径发生了改变等等. 要看你预览的浏览器是什么,我经常遇到IE预 ...
- 使用Visual Leak Detector for Visual C++ 捕捉内存泄露
什么是内存泄漏? 内存泄漏(memory leak),指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况.内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段 ...
- git 修改注释信息
1. push 之前 先看看自己提交过多少次,然后执行 git rebase -i HEAD~数字(你要修改你的第几次提交) 接下来执行,修改注释 git commit --amend 修改完注释之后 ...
- jquery中on绑定事件
之前项目中动态创建的标签元素 在绑定事件的时候 都是无效 无论如何都不能触发 eg:在页面加载完成之后 再由脚本动态创建的<div>元素 在绑定事件的时候 例如click事件 ...
- css flex布局
关于flex布局的一些简单用法 效果(下图) 实现代码: <!--html--> <div class="wrap"> <div class=&quo ...
- Oracle中生成随机数的函数(转载)
在Oracle中的DBMS_RANDOM程序包中封装了一些生成随机数和随机字符串的函数,其中常用的有以下两个: DBMS_RANDOM.VALUE函数 该函数用来产生一个随机数,有两种用法: 1. 产 ...
- HDU 5795 A Simple Nim 打表求SG函数的规律
A Simple Nim Problem Description Two players take turns picking candies from n heaps,the player wh ...