Torch深度学习库教程
2.9 nn神经网络库的应用
2.9.1 绪论
每一个神经网络的模块都是由多个Modules模块组成的,当然也有很多Module的子类模块,容器类模块例如Sequential,Parallel,和Concat模块,容器中包含有简单层例如Linear,Mean,Max和Reshape,也包括卷基层和转换函数例如Tanh。
损失函数是Criterion类的一个接口,它们在典型的任务中对于训练神经网络是非常有帮助的,最为常见的损失函数有均方损失函数MSECriterion和交叉熵损失函数ClassNLLCriterion。
最后,StochasticGradient类提供了一个高标准的方法去训练神经网络,这样就为自己训练神经网络提供了一个非常简单的方法。
2.9.2 Module类的详细函数
这一小节主要详细介绍神经网络包。一个神经网络在torch中被叫做Module,Moudle是一个抽象类,并且它定义了四种主要的方法:
- forward(input) 这里主要通过给定的input Tensor计算出Moudle模块的输出;
- backward(input,gradOutput) 这里主要相对与自身的参数和输入,计算Moudle的梯度
- zeroGradParameters() 这里相相对于Module将梯度清零
- updateParameters(learningRate)这里通过backward()函数计算出梯度之后,更新参数信息
同样也声明了两个成员:
- output:这是通过forward()函数输出的值
- gradInput:这个包含了相对于输入Module的梯度,在backward()函数中计算。
另外还定义了较少使用但是非常方便的两个函数
- share(mlp,s1,s2,…,sn):这使得Module共享模块mlp的参数s1,… sn。如果你想让Module之间共享相同的权值矩阵的话,这是非常有帮助的。
- clone(…) 提供了一个Module的深复制函数,包括它参数的当前状态。
这里还有一些重要的事项:
- 输出只是在forward()函数被调用之后包含有效值
- gradInput在backward(input,gradOutput)函数之后包含有效值.
- backward(input,gradOutput)使用forward(input)期间获得有效的计算,这必须在相同的input上并且在forward()调用之后调用backward(),否则梯度信息将不会正确。