神经网络模型中class的forward函数何时调用_pytorch中几种构建模型的方法的区别

本文介绍了PyTorch中构建神经网络模型的四种方式:继承Module类、使用Sequential类、ModuleList类和ModuleDict类。详细阐述了它们的区别和应用场景,包括forward函数的调用时机,以及在模型构造和参数管理中的不同作用。重点讨论了ModuleList和ModuleDict如何管理子模块,并强调了它们与Sequential的区别。
摘要由CSDN通过智能技术生成

一、继承Module类来构造模型

Module类是nn模块里提供的一个模型构造类(专门用来构造模型的),是所有神经网络模块的爸爸,我们可以继承它来定义我们想要的模型。

import torch
from torch import nn
class MLP(nn.Module):
    def __init__(self, **kwargs):
        # 调用MLP父类Module的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数
        # 参数,如“模型参数的访问、初始化和共享”一节将介绍的模型参数params
        super(MLP, self).__init__(**kwargs)
        self.hidden = nn.Linear(784, 256) # 隐藏层
        self.act = nn.ReLU()
        self.output = nn.Linear(256, 10)  # 输出层


    # 定义模型的前向计算,即如何根据输入x计算返回所需要的模型输出
    def forward(self, x):
        a = self.act(self.hidden(x))
        return self.output(a)

上面这个MLP就是继承了Module类,并且重写了Module类的__init__方法和forward方法。对于一个神经网络模型来说,确定这个模型有哪些层以及这些层之间的数据如何流动,那这个模型就确定了。所以MLP的__init__方法声明MLP模型有哪些类,MLP的forward方法规定数据如何在层之间流动。

部分初学者可能会想,那我还继承Module类干嘛,直接下面这样不行吗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值