深度学习笔记3torch实现多层感知器

转自:http://www.aichengxu.com/view/2464033

代码地址:https://github.com/vic-w/torch-practice/tree/master/multilayer-perceptro

--网络结构1-3-3-1,隐含层为两层,每层都有3个神经元,输入层和输出层都有一个神经元

model = nn.Sequential() 

--model现在是一个容器,要往这个容器中添加神经网络层(输入层、隐含层、输出层)来构成多层感知器(神经网络)

--容器要添加的第一层为输入层,1个输入, 3个输出

model:add(nn.Linear(1,3))

--然后我们在他后面添加一个Sigmoid层,它的节点个数会自动和前一层的输出个数保持一致。这里的--sigmoid函数是用来将数据归到0-1之间的数

--sigmoid函数有个缺点,当远0点数据时,sigmoid会输出为1,导数接近为0

model:add(nn.Sigmoid())

--接下来我们添加第一和第二隐藏层中间的线性连接,输入是3,输出也是3。

model:add(nn.Linear(3,3))

--作用一样

model:add(nn.Sigmoid()) 

--增加线性层,3个输入一个输出 

model:add(nn.Linear(3,1))

 

--构建多层感知器的完整代码如下

model = nn.Sequential()

model:add(nn.MulConstant(0.1)) --在输入进入之前先乘以0.1,缩小训练值  

model:add(nn.Linear(1,3))

model:add(nn.Sigmoid())

model:add(nn.Linear(3,3))

model:add(nn.Sigmoid())

model:add(nn.Linear(3,1))

model:add(nn.MulConstant(50000)) --在输入之后乘以50000,对预测数据的缩小

 

--默认的权值优化是梯度下降法,训练速度很慢。其实Torch已经给我们提供了各种先进的优化算法,都--放在optim这个库里。我们在文件的头部添加包含optim库

require 'optim'

--模型的参数拿出来看看,w是权值,1x3+3+3x3+3+3x1+1=22,dl_dw是w对loss的偏导,而且这两个--都是引用,也就是值的变化会影响模型的参数

w, dl_dw = model:getParameters()

 

feval = function(w_new)  

   if w ~= w_new then w:copy(w_new) end 

--导数初始为0 

   dl_dw:zero()  

--与上一篇的作用相同

   price_predict = model:forward(month_train)  

   loss = criterion:forward(price_predict, price_train)  

   model:backward(month_train, criterion:backward(price_predict, price_train))  

--返回损失和梯度

   return loss, dl_dw  

end  

--参数设定,学习率是0.01

params = {

  learningRate = 1e-2

}

--迭代3000次,使用改进的梯度下降法

for i=1,3000 do

  optim.rprop(feval, w, params)

--每10次动态画图,{}分割每一组数据,{}中的第一个参数是横坐标点,第二个参数是纵坐标点

   ifi%10==0 then

     gnuplot.plot({month, price}, {month_train:reshape(10),price_predict:reshape(10)})

   end

end


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值