• 深入剖析 深度学习中 __init()__函数和forward()函数


    前言

    再看代码时,发现init函数和forward函数都有参数,具体是怎么传参的呢?
    在这里插入图片描述
    为了更方便的讲解,会举简单的代码例子结合讲解。

    forward()__init__() 是神经网络模型类中的两个重要函数。它们通常是通过类的实例化和调用来执行的。

    1. __init()__函数

    __init__() 函数是Python类中的构造函数,用于初始化对象的属性。

    • 在深度学习中,通常用它来定义神经网络的结构,设置各种层(例如,全连接层、卷积层、循环层等)以及超参数(例如,学习率、激活函数等)。

    • 参数是在类实例化时传入的,通常作为构造函数的参数传递。这些参数可以包括网络的结构和超参数设置。

    import torch
    import torch.nn as nn
    
    class MyModel(nn.Module):
        def __init__(self, input_size, hidden_size, output_size):
            super(MyModel, self).__init__()
            self.fc1 = nn.Linear(input_size, hidden_size)
            self.relu = nn.ReLU()
            self.fc2 = nn.Linear(hidden_size, output_size)
    
        def forward(self, x):
            x = self.fc1(x)
            x = self.relu(x)
            x = self.fc2(x)
            return x
    
    # 创建模型实例,传递输入维度、隐藏层维度和输出维度作为参数
    model = MyModel(input_size=10, hidden_size=5, output_size=2)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2. forward()函数

    • forward() 函数定义了神经网络的前向传播过程。它接收输入数据并通过神经网络的层,最终输出模型的预测结果。

    • forward() 函数的参数是传入模型的输入数据,通常是一个张量(Tensor)。

    def forward(self, x):
        x = self.fc1(x)
        x = self.relu(x)
        x = self.fc2(x)
        return x
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这个示例中,输入数据 x 通过两个全连接层(fc1 和 fc2)以及激活函数(relu)进行处理,最终返回网络的输出。

    实例化一个神经网络模型后,可以使用该模型的 forward() 函数来进行前向传播,如下所示:

    input_data = torch.randn(1, 10)  # 示例输入数据,大小为 (batch_size, input_size)
    output = model(input_data)
    
    • 1
    • 2

    上述代码中,model(input_data) 调用了模型的 forward() 函数,将输入数据传递给模型并获取预测结果。

    这是深度学习中非常常见的模型的前向传播操作。

    补充

    1. 对于forward具体是怎样执行,自动调用的,可看我这篇文章:Pytorch中关于forward函数的理解与用法
    2. 对于类和对象不清晰的可看这篇文章:python 类和对象的详细分析

    3. 两者关系

    函数表述
    __init__() 函数1.类的构造函数中定义了模型的结构,包括网络层的定义、超参数的初始化等,用于设置模型的架构,并在模型实例化时执行。
    2.一般只执行一次。
    3.可以定义模型中的各种层、权重参数、激活函数等,以及设置模型的初始化配置。
    forward() 函数1.定义了模型的前向传播过程。它描述了数据如何在模型中流动,通过各个层,直到生成模型的输出。
    2.输入数据并调用 model(input_data) 时,forward() 函数会被调用来计算输出。
    3.决定了模型的具体行为,包括如何处理输入数据、层之间的连接、激活函数的应用等。

    两者关系如下:

    • __init__() 用于定义模型的静态结构,而 forward() 用于定义模型的动态行为。
    • __init__() 中,配置了模型的层和参数,但尚未进行具体的数据处理。__init__() 只执行一次。
      forward() 中包含了实际的数据流,将数据输入模型并调用 model(input_data) 时,forward() 函数会执行前向传播计算。

    总之,__init__() 初始化了模型的结构和参数,而 forward() 描述了如何将数据传递并在模型中进行处理。

    这两个函数共同构成了深度学习模型的核心。

  • 相关阅读:
    二进制代码反汇编逆向工具:IDA Pro(Win&Mac)v7.7 汉化版
    Ant-design-vue组件上传文档
    迅为龙芯2K1000开发板虚拟机ubuntu启动root用户
    037、目标检测-SSD实现
    软考高项-十大知识领域五大过程组图
    GAMES101 路径追踪
    探秘三维地形瓦片服务:流畅展现全球地貌的秘密揭秘
    不使用 Javascript 也可以和浏览器进行交互?快来我这里看看!
    create® 3入门教程-创建Create3 Docker映像
    两大图灵奖得主力作:计算机架构的新黄金时代
  • 原文地址:https://blog.csdn.net/weixin_47872288/article/details/133854044