400-123-4567

网站建设 APP开发 小程序

KNOWLEDGE/华信登录

分享你我感悟

您当前位置> 首页 > 华信登录 > APP开发

PyTorch 基础 : 神经网络包nn和优化器optm¶

发表时间:2024-03-04 12:55:00

文章作者:佚名

浏览次数:

torch.nn是专门为神经网络设计的模块化接口。nn构建于 Autograd之上,可用来定义和运行神经网络。 这里我们主要介绍几个一些常用的类

约定:torch.nn 我们为了方便使用,会为他设置别名为nn,本章除nn以外还有其他的命名约定



除了nn别名以外,我们还引用了nn.functional,这个包中包含了神经网络中使用的一些常用函数,这些函数的特点是,不具有可学习的参数(如ReLU,pool,DropOut等),这些函数可以放在构造函数中,也可以不放,但是这里建议不放。

一般情况下我们会将nn.functional 设置为大写的F,这样缩写方便调用



PyTorch中已经为我们准备好了现成的网络模型,只要继承nn.Module,并实现它的forward方法,PyTorch会根据autograd,自动实现backward函数,在forward函数中可使用任何tensor支持的函数,还可以使用if、for循环、print、log等Python语法,写法和标准的Python写法一致。



网络的可学习参数通过net.parameters()返回



net.named_parameters可同时返回可学习的参数及名称。



forward函数的输入和输出都是Tensor





在反向传播前,先要将所有参数的梯度清零


注意:torch.nn只支持mini-batches,不支持一次只输入一个样本,即一次必须是一个batch。

也就是说,就算我们输入一个样本,也会对样本进行分批,所以,所有的输入都会增加一个维度,我们对比下刚才的input,nn中定义为3维,但是我们人工创建时多增加了一个维度,变为了4维,最前面的1即为batch-size

在nn中PyTorch还预制了常用的损失函数,下面我们用MSELoss用来计算均方误差




在反向传播计算完所有参数的梯度后,还需要使用优化方法来更新网络的权重和参数,例如随机梯度下降法(SGD)的更新策略如下:

weight=weight - learning_rate * gradient

在torch.optim中实现大多数的优化方法,例如RMSProp、Adam、SGD等,下面我们使用SGD做个简单的样例




这样,神经网络的数据的一个完整的传播就已经通过PyTorch实现了,下面一章将介绍PyTorch提供的数据加载和处理工具,使用这些工具可以方便的处理所需要的数据。

看完这节,大家可能对神经网络模型里面的一些参数的计算方式还有疑惑,这部分会在第二章 第四节 卷积神经网络有详细介绍,并且在第三章 第二节 MNIST数据集手写数字识别的实践代码中有详细的注释说明。

相关华信注册查看更多

平台注册入口