Torch7学习(五)——学习神经网路包的用法(3)

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)

Convolution Layers

依据输入的Tensor的维度,可以分成3种。
Temporal Modules, Spatial Modules和Volumetric Modules,分别对应一维,二维和三维的输入。举例就是分别对应语句、图像、视频。

对于常见的Spatial Modules主要有SpatialConvolution,SpatialFullConvolution,SpatialMaxPooling,SpatialAvaragePooling和SpatialBatchNormalization。

SpatialConvolution

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)

Criterions

对于分类的,一般有classNLLCriterion, classEntropyCriterion。对于回归的,有MSECriterion.
成员函数有

[loss] forward(input, target)
[dLoss_doutput] backward(output, target)

下一篇博客将会将最最关心的如何书写自定义自动挡训练网络了!

你可能感兴趣的:(Deep,Learning,Lua,Torch7入门教程)