torch7学习(一)——Tensor
Torch7学习(二) —— Torch与Matlab的语法对比
Torch7学习(三)——学习神经网络包的用法(1)
Torch7学习(四)——学习神经网络包的用法(2)
Torch7学习(五)——学习神经网路包的用法(3)
Torch7学习(六)——学习神经网络包的用法(4)——利用optim进行训练
Torch7学习(七)——从neural-style代码中看自定义重载函数的训练方式
这篇博客主要是讲对于只有简单层的神经网络,进行手动挡的训练方法。
以及卷积层模块以及criterion模块。
Simple Layer的Add层。
module = nn.Add(inputDim, scalar)
y = torch.Tensor(5)
mlp = nn.Sequential()
mlp:add(nn.Add(5))
function gradUpdate(net,x,y,criterion,learningRate)
local pred = net:forward(x)
local err = criterion:forward(pred, y)
local gradCriterion = criterion:backward(pred, y)
-- 当必要的数据有了之后,进行三步法
-- 1. 清空net中所有参数的梯度
net:zeroGradParameters()
-- 2. backward一下,这个会更新网络的权值以及相应的权值梯度和输入梯度。
-- 当然这个函数只会返回输入的梯度。
net:backward(x,gradCriterion)
-- 3. 调用updateParameters进行更新参数
net:updateParameters(learningRate)
return err
end
-- 更新
for i = 1,1000 do
x = torch.rand(5)
y:copy(x)
for i = 1,5 do
y[i] = y[i]+1
end
-- 此时训练数据构造完毕
err = gradUpdate(mlp, x,y, nn.MSECriterion(), 0.01)
依据输入的Tensor的维度,可以分成3种。
Temporal Modules, Spatial Modules和Volumetric Modules,分别对应一维,二维和三维的输入。举例就是分别对应语句、图像、视频。
对于常见的Spatial Modules主要有SpatialConvolution,SpatialFullConvolution,SpatialMaxPooling,SpatialAvaragePooling和SpatialBatchNormalization。
module = nn.SpatialConvolution(inputChannel,outputChannel,kW, kH, [dW],[dH],[padW],[padH])
kW和kH分别是width和height。
dW和dH分别是step of width/height
padW, padH默认为0.
因此,如果原图像是inputChannel*height*width, 输出图像是outputChannel* oheight* owidth
那么:
owidth = floor(width+2*padW-kW)/dW +1)
oheight = floor(height+2*padH-kH)/dH +1)
对于分类的,一般有classNLLCriterion, classEntropyCriterion。对于回归的,有MSECriterion.
成员函数有
[loss] forward(input, target)
[dLoss_doutput] backward(output, target)
下一篇博客将会将最最关心的如何书写自定义自动挡训练网络了!