Torch7学习(三)——学习神经网络包的用法(1)

本文是Torch7神经网络包学习系列的第一篇,介绍了Module的概念,包括其作用和主要函数。通过学习,读者能够理解如何使用Module构建神经网络,并掌握最简单的自动训练方法GSD。
摘要由CSDN通过智能技术生成

torch7学习(一)——Tensor
Torch7学习(二) —— Torch与Matlab的语法对比
Torch7学习(三)——学习神经网络包的用法(1)
Torch7学习(四)——学习神经网络包的用法(2)
Torch7学习(五)——学习神经网路包的用法(3)
Torch7学习(六)——学习神经网络包的用法(4)——利用optim进行训练
Torch7学习(七)——从neural-style代码中看自定义重载函数的训练方式

总说

torch7框架学习首先还是应该先看最基本的torch包中有什么。在我的前2篇博客torch7学习(一)torch7学习(二) 已经较为详细讲了。接下来要看的是神经网络包nn中的内容。可以说,当学习了神经网络包中的内容后,则能看懂给予torch框架的论文代码了,并且已经具备一定的用该框架书写神经网络的能力。

目的

看完这篇博客后,应该能进行最简单的自动训练方式。(⊙o⊙)…,我这样说感觉自己像是个写书的或是老师。
下面将根据不同模块进行介绍

Overview

首先对整个nn包进行总览。
神经网络是由不同模块组成。Module是抽象类,子类是container,而container又有三个构建神经网络最重要的子类:Sequential, Parallel和Concat,由这三类构成的神经网络中可以包含简单层,即Linear, Mean, Max和Reshape等,也包括卷积层还有激活函数Tanh, ReLU等。这些都会在后面分别介绍。

当然你上面只是说了如何构建神经网络,那么怎么进行训练呢?首先你要有一个损失函数,在就是
Criterion模块。损失函数众多,常用的由MSECriterion, ClassNLLCriterion,第一个就是均方误差MSE,第二个就是分类用的交叉熵。有了损失函数后,那么就要开始用算法进行训练了,训练的方式有很多种,有手动挡自动挡。手动挡就是自己写如何更新权值,这个一般只针对只有简单层的网络,如果有卷积层的话,不太好写。自动挡就是直接调用内部的优化函数包optim来进行训练,当然了,推荐用自动挡啊。

初识Module

这里说的module是啥啊,就是模块啊,你把神经网络看成很多一小块一小块的模块组成的,有的小块是具有参数的,比如Linear或是卷积模块,有些是不带有参数的,比如Max或是Pooling。对于每个小块,总有输入吧,也有输出吧。那么对于那些具有参数的小块,则我们可以计算dLoss_dParams, 注意dLoss_dParams包含了2个,分别是dLoss_dWeight和dLoss_dBias。如果是不具有参数的小块,那么就没有dLoss_dParams了,不过二者都有dLoss_dInput和dLoss_dOutput。这个挺像matcovnet的思想的。如果没明白可以参考这个,Notes on MatConvNet ( I ) — Overview

Module是抽象类,包含了4个主要的函数:
1. forward(input) 根据输入计算该module的输出用的。
2. backward(input, gradOutput) 这里的gradOutput就是就是dLoss_dOutput。有了gradOutput和input就可以进行反向传播。值得注意的是,这里内部会计算dLoss_dParams和dLoss_dInput。一般来说只返回dLoss_dInput。事实上,一般来说我们最终要的是整个网络的权值,但是这个不用我们操心,我们也不用管如何更新。只要调用这个函数,则内部会更新网络权值。
3. zeroGradParameters() 这函数一般用于手动挡

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值