• Torch7学习笔记(四)StochasticGradient


    使用随机梯度下降训练神经网络

    StochasticGradient是一个比较高层次的类,它接受两个参数,module和criterion,前者是模型结构,后者是损失函数的类型。这个类本身有一些参数:

    LearningRate: 这是学习率,不用多说

    LearningRateDecay: 学习率衰减,current_learning_rate =learningRate / (1 + iteration * learningRateDecay)

    maxIteration: 最大迭代次数

    shuffleIndices 是否洗数据

    hookExample 这个比较神奇,是一个钩子函数,具体功能不详。

    hookIteration: 同样的。

    如何使用StochasticGradient来训练神经网络?

    只有两步

    1. 准备好你的数据
    2. 设计好神经网络结构和loss function

    同样的用官方文档的一个例子:

    准备数据集:

    dataset={};

    function dataset:size() return 100 end -- 100 examples

    for i=1,dataset:size() do

      local input = torch.randn(2);     -- normally distributed example in 2d

      local output = torch.Tensor(1);

      if input[1]*input[2]>0 then     -- calculate label for XOR function

        output[1] = -1;

      else

        output[1] = 1

      end

      dataset[i] = {input, output}

    end

     

    定义神经网络:

    require "nn"

    mlp = nn.Sequential();  -- make a multi-layer perceptron

    inputs = 2; outputs = 1; HUs = 20; -- parameters

    mlp:add(nn.Linear(inputs, HUs))

    mlp:add(nn.Tanh())

    mlp:add(nn.Linear(HUs, outputs))

    训练网络:

    criterion = nn.MSECriterion() 

    trainer = nn.StochasticGradient(mlp, criterion)

    trainer.learningRate = 0.01

    trainer:train(dataset)

     

    同样的,如果不使用stochasticGradient类,手动训练神经网络也是可以的。

    这里举得例子是训练XOR问题。

    带有一层隐藏层的神经网络:

    require "nn"

    mlp = nn.Sequential();  -- make a multi-layer perceptron

    inputs = 2; outputs = 1; HUs = 20; -- parameters

    mlp:add(nn.Linear(inputs, HUs))

    mlp:add(nn.Tanh())

    mlp:add(nn.Linear(HUs, outputs))

     

    Loss function

    Criterion = nn.MSECriterion()

     

    Training:

    for i = 1,2500 do

      -- random sample(生成数据集)

      local input= torch.randn(2);     -- normally distributed example in 2d

      local output= torch.Tensor(1);

      if input[1]*input[2] > 0 then  -- calculate label for XOR function

        output[1] = -1

      else

        output[1] = 1

      end

     

    -- 这里需要注意的是criterion的forward和nn的forward的调用顺序

     

      -- feed it to the neural network and the criterion

      criterion:forward(mlp:forward(input), output)

     

      -- train over this example in 3 steps

      -- (1) zero the accumulation of the gradients

      mlp:zeroGradParameters()

      -- (2) accumulate gradients

      mlp:backward(input, criterion:backward(mlp.output, output))

      -- (3) update parameters with a 0.01 learning rate

      mlp:updateParameters(0.01)

    end

  • 相关阅读:
    MCV 和 MTV框架基本信息
    Django的一些操作与视图函数
    Django模板渲染
    python--jQuery
    MEF初体验之五:Lazy Exports
    MEF初体验之四:Imports声明
    MEF初体验之三:Exports声明
    MEF初体验之二:定义组合部件和契约
    MEF初体验之一:在应用程序宿主MEF
    WPF学习(12)动画
  • 原文地址:https://www.cnblogs.com/crossing/p/4827297.html
Copyright © 2020-2023  润新知