深度学习torch之三(神经网络的前向传播和反向传播以及损失函数的基本操作)

1.神经网络的前向传播和反向传播

require'image';
input=torch.rand(1,32,32)
itorch.image(input)
随即生产一张照片,1通道,32x32像素的。为了直观像是,导入image包,然后用itorch.image()方法显示生成的图片,就是随即的一些点。

output=model:forward(input)
用之前建立好的神经网络model调用forward()方法输入随即生成的图片得到输出的结果,如打印出来的形式,model最后是10个输出节点,这里输出了10个值。注意,这是前向传播,网络里面的权重是随即分布的,这是BP算法之前需要做的运算。

model:zeroGradParameters();
grandInput=model:backward(input,rand(10))
print(#grandInput)
model:zeroGrandParameters()是将网络里面的梯度缓存设置为0,model:backward是网络model的反向传播方法,第一个参数是输入的图片,这里应与forward()方法里面输入的图片一致,第二个参数在这里的意思是训练用的分类标签,注意不是预测出来的标签,是训练样本的真实的标签,即需要拟合的标签。最后返回的是需要输入的梯度,即进行梯度下降算法是需要的那个梯度


2.损失函数的基本操作

criterion评价准则,这是用来定义损失函数的。当你想让你的神经网络学习一些东西时,你就要给他一些反馈,告诉他怎么做是对的。损失函数能够形式化的衡量你的神经网络的好坏。

criterion = nn.ClassNLLCriterion()
还是在nn这个包里面有很多的评测函数,在这里我选择了ClassNLLCriterion()这种方法,这是用来多分类的方法。

err = criterion:forward(output,10)
损失函数的实现也有正向和反向两个操作。 就这个例子来说我们定义是适合对分类的损失函数,调用他的前向传播方法并输入的参数分别为 预测的类 训练样本所属的类 。这里执行后会有一个返回值,即他们的误差err。

gradients=criterion:backward(output,10)
执行完损失函数的前向操作后,再进行反向操作,backward()方法里面的参数同forward()函数里的参数,返回值是损失函数的梯度。

gradInput=model:backward(input,gradients)
model:updateParameters(0.01)
调用神经网络model的backward()方法输入训练集和其对应的损失函数梯度。然后,使用神经网络model的updateParameters()更新权重,该方法的输入值为学习率,即完成了训练。注意,gradInput这个返回值可写可不写不影响我们的训练。







你可能感兴趣的:(torch,lua,deep,learning)