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

时间: 2024-08-08 17:56:24

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

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

lucene学习笔记(二)

package index; import java.io.File; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIn

python学习笔记之module && package

个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, __init__.py可以有两种形式, 一种是直接import多个模块,例如 import fibo import abc 另外一种是 __all__ = ["A","B"] python学习笔记之module && package python的mo

NFC学习笔记二——Libnfc简介与安装

一直想把自己对过的英文文章做一下翻译记录下来,趁着学习NFC,现将libnfc首页的对libnfc介绍和在不同操作系统上对libnfc安装的文章做一下翻译,一方面提高一下自己的英语,另一方面学习一下libnfc. 原文地址:http://nfc-tools.org/index.php?title=Libnfc 公共平台独立的近场通讯(NFC)库 libnfc是GNU公共许可正下发布的第一个免费的底层的NFC开发包和编程API.它对任何人事完全免费和公开的.这个列表显示了libnfc支持的功能.l

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

spidering hacks 学习笔记(二)

看过去很乱,学习的记录东西而已,等我读完这本书,就把笔记给整理下!嘿嘿 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74

Android学习笔记二十五之ListView多布局实现

Android学习笔记二十五之ListView多布局实现 这一节是介绍ListView这个控件的最后一节,实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,这一节,我们就来实现一个ListView的多种Item. 要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图 ExpandableListView可折叠列表 这一节我们介绍第三个用适配器的控件,ExpandableListView可折叠列表.这个控件可以实现我们在QQ中非常常见好友分组功能,ExpandableListView是ListView的子类,用法跟ListView差不多,下面我们来学习这个控件的基本使用: 常用属性: android:childDivider:指定各组内子类表项之间的分隔条,

Caliburn.Micro学习笔记(二)----Actions

Caliburn.Micro学习笔记(二)----Actions 上一篇已经简单说了一下引导类和简单的控件绑定 我的上一个例子里的button自动匹配到ViewModel事件你一定感觉很好玩吧 今天说一下它的Actions,看一下Caliburn.Micro给我们提供了多强大的支持 我们还是从做例子开始 demo的源码下载在文章的最后 例子1.无参数方法调用 点击button把textBox输入的文本弹出来 如果textbox里没有文本button不可点,看一下效果图 看一下前台代码 <Stac