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

来源:互联网 发布:java list移除元素 编辑:程序博客网 时间:2024/05/19 14:16

转自: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
原创粉丝点击