zl程序教程

您现在的位置是:首页 >  后端

当前栏目

pytorch 使用Module类和Sequential类自定义模型

PyTorch 模型 自定义 module 使用 sequential
2023-09-11 14:22:51 时间

https://blog.csdn.net/qq_27825451/article/details/90550890这个链接超级详细!

class NeuralNet(nn.Module):

pytorch中其实一般没有特别明显的Layer和Module的区别,不管是自定义层、自定义块、自定义模型,都是通过继承Module类完成的,这一点很重要。其实Sequential类也是继承自Module类的。

总结:pytorch里面一切自定义操作基本上都是继承nn.Module类来实现的

一、module类

class Module(object):
    def __init__(self):
    def forward(self, *input):
 
    def add_module(self, name, module):
    def cuda(self, device=None):
    def cpu(self):
    def __call__(self, *input, **kwargs):
    def parameters(self, recurse=True):
    def named_parameters(self, prefix='', recurse=True):
    def children(self):
    def named_children(self):
    def modules(self):  
    def named_modules(self, memo=None, prefix=''):
    def train(self, mode=True):
    def eval(self):
    def zero_grad(self):
    def __repr__(self):
    def __dir__(self):
'''
有一部分没有完全列出来
'''

我们在定义自已的网络的时候,需要继承nn.Module类,并重新实现构造函数__init__构造函数和forward这两个方法。但有一些注意技巧:

(1)一般把网络中具有可学习参数的层(如全连接层、卷积层等)放在构造函数__init__()中,当然也可以把不具有参数的层也放在里面;

(2)一般把不具有可学习参数的层(如ReLU、dropout、BatchNormanation层)可放在构造函数中,也可以不放在构造函数中。如果不放在构造函数__init__里面,那么在forward方法里面可以使用nn.functional来代替

(3)forward方法是必须要重写的,它是实现模型的功能,实现各个层之间的连接关系的核心。

 

二、sequential类

三种实现方法:https://blog.csdn.net/qq_27825451/article/details/90551513