当前位置: 首页 > news >正文

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

目录

  • 前言
  • 1. __init()__函数
  • 2. forward()函数
  • 3. 两者关系

前言

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

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

1. __init()__函数

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

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

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

import torch
import torch.nn as nnclass 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)

2. forward()函数

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

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

def forward(self, x):x = self.fc1(x)x = self.relu(x)x = self.fc2(x)return x

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

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

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

上述代码中,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() 描述了如何将数据传递并在模型中进行处理。

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

http://www.lryc.cn/news/194500.html

相关文章:

  • BUUCTF学习(一):SQL注入,万能密码
  • 基于springboot实现心灵治愈心理健康平台系统项目【项目源码+论文说明】计算机毕业设计
  • 百度Apollo自动驾驶
  • 数据迁移库工具-C版-01-HappySunshineV1.0-(支持Gbase8a)
  • 【sv】 pack/unpack stream
  • 二、使用DockerCompose部署RocketMQ
  • 论文笔记[156]PARAFAC. tutorial and applications
  • AKKA.Net 的使用 来自CHATGPT
  • 网络安全—小白学习笔记
  • OpenRemote: Java 开源 IoT 物联网开发平台,匹配智慧城市、智能家居、能源管理
  • GO-unioffice实现word编辑
  • SpringMVC的拦截器(Interceptor)
  • 【git】gitlab常用命令
  • 解读下SWD协议以及其应用
  • 基于单目的光流法测速
  • 排序-算法
  • 【特纳斯电子】基于单片机的火灾监测报警系统-实物设计
  • 网络安全就业形势怎么样?
  • 【Golang】Go的并发和并行性解释。谁说Go不是并行语言?
  • k8s-16 k8s调度
  • 【2023研电赛】全国技术竞赛一等奖:基于FPGA的超低时延激光多媒体终端
  • Annoy vs Milvus:哪个向量数据库更适合您的AI应用?知其然知其所以然
  • android 13.0 SystemUI导航栏添加虚拟按键功能(一)
  • 内存管理-分页、虚拟地址、虚拟内容、页面置换算法
  • 【C++入门】命名空间详解(从零开始,冲击蓝桥杯)
  • 通过代码MyBatis-plus实现对表中createTime和updateTime进行自动更新
  • HTML 实时显示本地电脑时间(精确到毫秒)
  • opencv跨平台arm交叉编译之ubuntu
  • Git命令全集
  • [BigData:Hadoop]:安装部署篇