torch神经网络包 nn
y = torch.func(x,…)等价于y = x:func(…),就是说如果用”torch”,那么“src”是第一个参数。否则就”src:”
神经网络训练正常有5步:
1.加载数据
2.定义网络 nn.Sequential
3.定义损失函数 nn.ClassNLLCriterion 等等
4.训练 trainer = nn.StochasticGradient(net, criterion)
5.测试 predict = net:forward(trainset.data[i])
如果用GPU,dataset,net和criterion需要转换下,即net:cuda()。
神经网络包 nn
神经网络是由不同的模块构成。
构建网络
Module 抽象类,子类是Container,Container有3个重要的子类:Sequential, Parallel和Concat,由这三类构成的神经网络中可以包含简单层,即Linear, Mean, Max和Reshape等,也包括卷积层还有激活函数Tanh, ReLU等。
Module是抽象类,主要有4个主要的函数。
1.forward(input) 根据输入计算该mode的输出
2.backward(input, gradOutput)反向传播,更新网络权重。这里的gradOutput就是就是dLoss_dOutput
3. [output] updateOutput (input) 更新输出,只需要输入值就行
4. [gradInput] updateGradInput (input, gradOutput) 这个需要输入值以及dLoss_doutput,才能进行反向传播,由梯度求导的链式法则可以知道。这个函数主要是计算dLoss_dInput
说明:
1.forward 和 backward函数的input必须一致
2. forward会调用updateOutput,backward会调用updateGradInput和accGradParameters。
3.高级训练方式只需重载updateOutput和updateGradInput,内部参数会自动改变。自定义的Module层等可以重写这两个函数。
4. backward 和updateGradInput方法中用到的 gradOutput,就是dLoss_dOutput,可以采用Criterion模块的backward计算得出。
Container
有三个子类:Sequential, Parallel, Concat,提供3种构建神经网络的容器,一般常用第一种。网络结构如下图所示。
Sequential创建一个网络容器,然后不断add(moudule),向里面添加层。
激活函数
SoftMax, SoftMin, SoftPlus, LogSigmoid, LogSoftMax, Sigmoid, Tanh, ReLU, PReLU, ELU, LeakyReLU等等
Layers
常用层
1.Linear 全连接
module = nn.Linear(10,5)
mlp = nn.Sequential()
mlp:add(module)
print(module.weight)
print(module.bias)
print(module.gradWeight)
print(module.gradBias)
x = torch.Tensor(10) -- 10 inputs
y = module:forward(x)
2.Dropout
module = nn.Dropout(p)
3.View
module = nn.View(sizes)
改变网络的输出tensor的shape
4.Normalize
归一化
卷积层
Temporal Modules, Spatial Modules和Volumetric Modules,分别对应一维,二维和三维的输入。举例就是分别对应语句、图像、视频。
Spatial Modules 主要有SpatialConvolution,SpatialFullConvolution,SpatialMaxPooling,SpatialAvaragePooling和SpatialBatchNormalization这几个。
损耗函数
Criterion模块。有MSECriterion均方误差,ClassNLLCriterion交叉熵。
对于分类一般有classNLLCriterion, classEntropyCriterion,回归一般使用MSECriterion。
成员函数一般有两个。
[loss] forward(input, target)
[dLoss_doutput] backward(input, target)
参考网址
1.http://blog.csdn.net/hungryof/article/details/51802829
2.http://m.blog.csdn.net/article/details?id=51339385
3.Neural-Style代码解析
http://blog.csdn.net/hungryof/article/details/52037405
4.日常笔记:Lua & Torch
http://blog.csdn.net/u010167269/article/details/51913803
5.http://nn.readthedocs.io/en/rtd/convolution/
6.http://nn.readthedocs.io/en/rtd/index.html