重新理解一个类中的forward()和__init__()函数

这篇具有很好参考价值的文章主要介绍了重新理解一个类中的forward()和__init__()函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

forward()函数和__init__()的关系

__init__() 是一个类的构造函数,用于初始化对象的属性。它会在创建对象时自动调用,而且通常在这里完成对象所需的所有初始化操作。

forward() 是一个神经网络模型中的方法,用于定义数据流的向前传播过程。它接受输入数据,通过网络的各个层进行计算,最终返回输出结果。

在神经网络的 PyTorch 实现中,__init__() 方法通常用于实例化各个网络层(例如卷积层、池化层、全连接层的维度等【这里只是执行了初始化,但是可以通过后面实例化时调用的forward()重新给神经网络维度赋值】),并设置各层的超参数(例如卷积核大小、步幅、填充等)。而 forward() 方法则定义了这些网络层之间的计算顺序与逻辑,它负责将输入数据传递到网络中,并返回计算结果【这里输入进forward的数据维度要和forward()接收的第一个参数维度相同,虽然你看它只接受了一个参数‘x’,但是这个x的维度是多维的(在本代码中就是(input_dim, hidden_dim)两个大维度),而不是普通意义上的一个自然数

因此,两个方法通常一起使用,__init__() 用于设置网络结构和超参数,forward() 则定义了从输入到输出的完整计算流程。

例子:

定义类:

import torch
import torch.nn as nn

class SimpleNet(nn.Module):
    def __init__(self, input_dim, hidden_dim, output_dim):
        super(SimpleNet, self).__init__()
        self.fc1 = nn.Linear(input_dim, hidden_dim)
        self.relu = nn.ReLU()
        self.fc2 = nn.Linear(hidden_dim, output_dim)
    
    def forward(self, x):
        out = self.fc1(x)
        out = self.relu(out)
        out = self.fc2(out)
        return out

在上面的代码中,我们定义了一个名为 SimpleNet 的神经网络模型,它继承自 PyTorch 中的 nn.Module 类。我们在 __init__() 方法中定义了三层网络结构,分别是输入层 fc1、激活层 relu 和输出层 fc2。其中,输入层和输出层都使用了全连接层(nn.Linear),而激活层使用了 ReLU 激活函数。

forward() 方法中,我们按照输入数据 x 经过 fc1relufc2 三层的顺序进行计算,最终返回输出结果 out

调用

调用上述代码的 forward() 方法需要先创建一个 SimpleNet 类的对象,并将输入数据传递给该对象。以下是一个简单的示例:

# 创建一个 SimpleNet 对象,设置输入维度为 10,隐藏层维度为 20,输出维度为 5
net = SimpleNet(10, 20, 5)

# 构造一个随机的输入张量,大小为 [batch_size, input_dim],这里令 batch_size=1
input_tensor = torch.randn(1, 10)

# 将输入张量传入网络中,得到输出张量
output_tensor = net(input_tensor)

# 打印输出张量的形状
print(output_tensor.shape)

为什么上面的代没有看到 __init__()、forword()函数的出现就完成了上述代码的调用呢?

初始化一个类时,则自动调用了该类的 __init__() 方法【net = SimpleNet(10, 20, 5)】

调用一个类的实例时,会自动调用该类的forward() 方法【output_tensor = net(input_tensor)】文章来源地址https://www.toymoban.com/news/detail-591099.html

到了这里,关于重新理解一个类中的forward()和__init__()函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++回调函数 匿名函数,类中的方法做为回调函数

    C++中的回调函数和匿名函数都是函数指针或函数对象的使用形式。下面分别介绍它们的使用方法。 回调函数是一种函数指针,它允许将函数作为参数传递给另一个函数,并在需要时调用它。这种技术通常用于事件处理、异步处理和状态机等应用中。 下面是一个简单的示例,

    2024年02月01日
    浏览(45)
  • 在 Qt 的文本编辑类中,document() 是一个成员函数,用于获取文档对象

    在 Qt 的文本编辑类中, document() 是一个成员函数,用于获取文档对象。它返回与文本编辑器关联的 QTextDocument 对象的指针。 QTextDocument 类是 Qt 中用于处理富文本内容的类。它包含了文本内容以及相关的格式、样式和布局信息。通过 document() 函数,可以获取到当前文本编辑器

    2024年02月04日
    浏览(40)
  • C++day3(类、this指针、类中的特殊成员函数)

    1.类的应用实例 2.定义一个矩形类(Rectangle),包含私有成员长(length)、宽(width),定义成员函数: 设置长度: void set_len(int l); 设置宽度: void set_wid(int w); 获取长度: int get_len(); 获取宽度: int get_wid(); 显示周长和面积: void show(); 3.必须使用this指针的场合 4.构造函数允许函数重载 5.构造

    2024年02月11日
    浏览(52)
  • Spring事务失效,同一个类中的内部方法调用事务失效

    所谓声明式事务,也就是通过配置的方式,比如通过 配置文件xml或者注解 的方式,来告诉Spring哪些方法需要Spring帮忙管理事务,然后开发者只需要关注业务代码,而事务的事情则由Spring自动帮我们控制。 配置文件的方式 :即在spring.xml文件中进行统一配置,开发者基本不用

    2023年04月18日
    浏览(45)
  • 【Python】pandas中的std()函数—参数ddof的理解

    在利用pandas进行数据分析时,有时需要计算某一列数据的标准差,我们常用 std() 函数来实现,但是一般都没有关注过里面的一个重要参数 ddof ,本文就来介绍一下这个参数的理解。 ddof参数的取值一般有两个,即 ddof=0 或者 ddof=1 。 当我们的参数取ddof=0时,计算的是总体标准

    2023年04月17日
    浏览(44)
  • Python趣味入门13:类中的各种变量

    其中我们已知道定义变量在类中就表示为属性。但是在不同的位置定义变量会有不同的作用,并且采用不同的命名方式,也会让变量具有不同的作用 本文假设有一个类指南针(compass),可想象成某个地图游戏中帮助主角寻找方向,也是本节主要的示例。 compass类的定义如下代

    2024年02月04日
    浏览(42)
  • go语言中的init() 函数是什么时候执行的?

    在main函数之前执行 init()函数是go初始化的一部分,由runtime初始化每个导入的包,初始化不是按照从上到下的导入顺序,而是按照解析的依赖关系, 没有依赖的包最先初始化 。   每个包首 先初始化包作用域的常量和变量 (常量优先于变量),然 后执行包的 init() 函数 。同

    2024年02月15日
    浏览(42)
  • Go语言中的init函数: 特点、用途和注意事项

    在Go语言中, init() 函数是一种特殊的函数,用于在程序启动时自动执行一次。它的存在为我们提供了一种机制,可以在程序启动时进行一些必要的初始化操作,为程序的正常运行做好准备。 在这篇文章中,我们将详细探讨 init() 函数的特点、用途和注意事项,希望能帮助你更

    2024年02月08日
    浏览(55)
  • 编写一个类为Rectangle。该类有两个属性: 长(length)和宽(width),计算矩形面积周长。写另外一个类,来检验自己编写的类中的方法是否正确。

    编写一个类为Rectangle. 该类有两个属性: 长(length)和宽(width)默认值为1,该两个变量为私有的,即private. 其它方法为: 构造方法:public Rectangle();   Public Rentangle(double length, double width); 方法: 矩形对象调用该方法,可以得到面积:public double getArea() 矩形对象调用该方法,可以

    2024年02月05日
    浏览(44)
  • __init__()函数-Python

    用Python进行面向对象编程时,通常会用到__init__ 方法(函数)。python中的__init__()方法相当于java中的构造函数,在创建一个类对象之后一定会调用的方法。 init ()方法又被称为构造器(constructor)。 所有类都有一个名为__init__()的函数, 该函数总是在类被初始化时执行 。 也可

    2024年02月12日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包