torch学习(五) simply application

一、supervised learning
(一)data
矩阵的操作
1.获得矩阵
t1 = torch.range(1,75):resize(3,5,5)
t2 = torch.range(1,25):resize(5,5)
2.使用[]取矩阵子集
t1[2]
3.重新赋值
t1[2]:fill(7)
4.使用[{}]slicing
t2[{ {},2 }] --第二列
t2[{ 2,{} }] --第二行数据,以列形式展示
t2[{ {2},{} }] --第二行数据,以行形式展示
t2[{ {1,3},{3,4} }] --第1-3行,第3-4列的矩阵
t2[{ {3},{4} }] --第3行第4列的数据
t2[{ 3,4 }] --第3行第4列的数据
t2[{ {},{2,-2} }] --第2列到倒数第2列
t2[{ -1,-1 }] --最后一行最后一列数据
4.使用[{}]复制tensors
t3 = torch.Tensor(5)
t3[{}] = t2[{ {},1 }]
t4 = torch.Tensor(5,2)
t4[{ {},1 }] = t2[{ {},2 }]
t4[{ {},2 }] = t2[{ {},5 }]
(二)model
1.logistic regression
   model = nn.Sequential()
   model:add(nn.Reshape(ninputs))
   model:add(nn.Linear(ninputs,noutputs))
2.MLP
   model = nn.Sequential()
   model:add(nn.Reshape(ninputs))
   model:add(nn.Linear(ninputs,nhiddens))
   model:add(nn.Tanh())
   model:add(nn.Linear(nhiddens,noutputs))
3.ConvNet
      model = nn.Sequential()

      -- stage 1 : filter bank -> squashing -> L2 pooling -> normalization
      model:add(nn.SpatialConvolutionMM(nfeats, nstates[1], filtsize, filtsize))
      model:add(nn.Tanh())
      model:add(nn.SpatialLPPooling(nstates[1],2,poolsize,poolsize,poolsize,poolsize))
      model:add(nn.SpatialSubtractiveNormalization(nstates[1], normkernel))

      -- stage 2 : filter bank -> squashing -> L2 pooling -> normalization
      model:add(nn.SpatialConvolutionMM(nstates[1], nstates[2], filtsize, filtsize))
      model:add(nn.Tanh())
      model:add(nn.SpatialLPPooling(nstates[2],2,poolsize,poolsize,poolsize,poolsize))
      model:add(nn.SpatialSubtractiveNormalization(nstates[2], normkernel))

      -- stage 3 : standard 2-layer neural network
      model:add(nn.Reshape(nstates[2]*filtsize*filtsize))
      model:add(nn.Linear(nstates[2]*filtsize*filtsize, nstates[3]))
      model:add(nn.Tanh())
      model:add(nn.Linear(nstates[3], noutputs))
(三)loss function
1.MSE(  mean-square error
criterion  = nn.MSECriterion ( )
2. the negative log-likelihood
criterion  = nn.ClassNLLCriterion ( )
3. multi-class margin loss
criterion  = nn.MultiMarginCriterion ( )
(四)train
1.使用cuda
   model:cuda()
   criterion:cuda()
2.shuffle at each epoch
   shuffle = torch.randperm(trsize)
3.计算loss
   -- estimate f
   local output = model:forward(inputs[i])
   local err = criterion:forward(output, targets[i])
   -- estimate df/dW
   local df_do = criterion:backward(output, targets[i])
   model:backward(inputs[i], df_do)
4.optimize
   optimMethod(feval, parameters, optimState)
二、creating module
Module是神经网络的基本组成部分,作为一个抽象类,可以通过定义成员函数实现不同的神经网络结构。
(一)、forward(input)
1.调用updateOutput(input)
对module的输出进行处理
(二)、backward(input, gradOutput)
在使用backward之前需要首先调用forward
1.updateGradInput(input, gradOutput)
对gradOutput处理以后作为gradInput
2. accGradParameters(input, gradOutput)
计算该module对应的梯度
(三)、reset()
训练之前的初始化
local NewClass, Parent  = torch.class ( 'nn.NewClass''nn.Module' )
 
function NewClass:__init ( )
   parent.__init (self ) end
 
function NewClass:updateOutput (input ) end
 
function NewClass:updateGradInput (input, gradOutput ) end
 
function NewClass:accGradParameters (input, gradOutput ) end
 
function NewClass:reset ( ) end


http://code.madbits.com/wiki/doku.php?id=tutorial_supervised
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值