首页 技术 正文
技术 2022年11月18日
0 收藏 774 点赞 3,945 浏览 2233 个字

神经网络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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,075
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,551
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,399
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,176
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,811
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,893