您的位置:首页 > 其它

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

2016-07-25 22:12 357 查看
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)


下一篇博客将会将最最关心的如何书写自定义自动挡训练网络了!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: