【pytorch】torch.nn.Module 模块笔记

简介

torch.nn.Module 是所有神经网络单元的基类,包含网络各层的定义及forward方法。
torcn.nn是专门为神经网络设计的模块化接口。构建于autograd之上,可以用来定义和运行神经网络。

部分内容有参考CSDN博主「LoveMIss-Y」的原创文章CSDN博主「Vic_Hao」的原创文章
在pytorch里面自定义层也是通过继承自nn.Module类来实现的。pytorch里面一般是没有层的概念,层也是当成一个模型来处理的,这里和keras是不一样的。keras更加注重的是层Layer、pytorch更加注重的是模型Module。
Pytorch基于nn.Module构建的模型中,只支持mini-batch的Variable输入方式。比如,只有一张输入图片,也需要变成NxCxHxW的形式。

自定义模型

pytorch框架中自定义一个模型:通过继承nn.Module类来实现,在__init__构造函数中申明各个层的定义,在forward中实现层之间的连接关系,实际上就是前向传播的过程。

如何定义自己的网络:

  1. 需要继承nn.Module类,并实现forward方法。继承nn.Module类之后,在构造函数中要调用Module的构造函数, super(Linear, self).init()
  2. 一般把网络中具有可学习参数的层放在构造函数__init__()中。
  3. 不具有可学习参数的层(如ReLU)可放在构造函数中,也可不放在构造函数中(而在forward中使用nn.functional来代替)。可学习参数放在构造函数中,并且通过nn.Parameter()使参数以parameters(一种tensor,默认是自动求导)的形式存在Module中,并且通过parameters()或者named_parameters()以迭代器的方式返回可学习参数。
  4. 只要在nn.Module中定义了forward函数,backward函数就会被自动实现(利用Autograd)。而且一般不是显式的调用forward(layer.forward), 而是layer(input), 会自执行forward().
  5. 在forward中可以使用任何Variable支持的函数,毕竟在整个pytorch构建的图中,是Varible在流动。还可以使用if, for, print, log等python语法。

猜你喜欢

转载自www.cnblogs.com/ytxwzqin/p/12760956.html