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

【pytorch(06)】全连接神经网络:基本组件认知,线性层、激活函数、损失函数、优化器

【pytorch(01)】CUDA、cuDNN、pytorch安装,神奇魔法解决网络问题

【pytorch(02)】Tensor(张量)概述、如何创建、常见属性,切换设备

【pytorch(03)】Tensor(张量)数据转换、常见操作(元素值运算、阿达玛积、相乘、形状操作)

【pytorch(04)】自动微分:基础概念,梯度计算,梯度上下文控制

【pytorch(05)】感知神经网络,构造人工神经元,深入神经网络(了解结构,如何构建),全连接神经网络

目录

  • 全连接神经网络:基本组件认知
  • 线性层组件
  • 激活函数组件
  • 损失函数组件
    • 1.回归任务的损失函数:
    • 2.分类任务的损失函数:
  • 优化器

全连接神经网络:基本组件认知

先初步认知,他们用法基本一样的,后续在学习深度神经网络和卷积神经网络的过程中会很自然的学到更多组件!

官方文档:https://pytorch.org/docs/stable/nn.html

线性层组件

nn.Linear是 PyTorch 中的一个非常重要的模块,用于实现全连接层(也称为线性层)。它是神经网络中常用的一种层类型,主要用于将输入数据通过线性变换映射到输出空间。

torch.nn.Linear(in_features, out_features, bias=True)

参数说明:

in_features:

  • 输入特征的数量(即输入数据的维度)。
  • 例如,如果输入是一个长度为 100 的向量,则 in_features=100。

out_features:

  • 输出特征的数量(即输出数据的维度)。
  • 例如,如果希望输出是一个长度为 50 的向量,则 out_features=50。

bias:

  • 是否使用偏置项(默认值为 True)。
  • 如果设置为 False,则不会学习偏置项。

示例:构建3层全连接神经网络:在__init__方法中定义网络结构,在forward定义前向传播

import torch
from torch import nn
# 定义全连接神经网络模型
class MyFcnn(nn.Module):def __init__(self, input_size,out_size):# 父类初始化super(MyFcnn, self).__init__()# 定义线性层1self.fc1 = nn.Linear(input_size, 64)# 定义线性层2,输入要和第一层的输出一致self.fc2 = nn.Linear(64, 32)# 定义线性层3,输入要和第二层的输出一致self.fc3 = nn.Linear(32, out_size)def forward(self, x):x = self.fc1(x)x = self.fc2(x)x = self.fc3(x)return xinput_size = 32
out_size = 1
model = MyFcnn(input_size,out_size)
print(model)

如果模型中线性层按顺序叠加,也可以使用nn.Sequential构建模型。nn.Sequential 是一个顺序容器,内置了自动的前向传播逻辑,它会自动将输入数据依次传递给其中的每一层,并执行前向传播,不需要显式定义 forward() 方法。

import torch
from torch import nninput_size = 32
# 定义全连接神经网络模型
model = nn.Sequential(nn.Linear(input_size, 64),nn.Linear(64, 32),nn.Linear(32, 1)
)
print(model)

激活函数组件

激活函数的作用是在隐藏层引入非线性,使得神经网络能够学习和表示复杂的函数关系,使网络具备非线性能力,增强其表达能力。

常见激活函数:

sigmoid函数:

import torch.nn.functional as F
sigmoid = F.sigmoid()

tanh函数:

tanh = F.tanh()

ReLU函数:

import torch.nn as nn
relu = nn.ReLU()

LeakyReLU函数:

leaky_relu = nn.LeakyReLU(negative_slope=0.01)

softmax函数:

softmax = F.softmax

损失函数组件

损失函数的主要作用是量化模型预测值(y^)与真实值(y)之间的差异。通常,损失函数的值越小,表示模型的预测越接近真实值。训练过程中,通过优化算法(如梯度下降)最小化损失函数,从而调整模型的参数。

PyTorch已内置多种损失函数,在构建神经网络时随用随取!

文档:https://pytorch.org/docs/stable/nn.html#loss-functions

根据任务类型(如回归、分类等),损失函数可以分为以下几类:

1.回归任务的损失函数:

1.均方误差损失(MSE Loss)

  • 函数: torch.nn.MSELoss
import torch.nn as nn
loss_fn = nn.MSELoss()

2.L1 损失(L1 Loss)

也叫做MAE(Mean Absolute Error,平均绝对误差)

  • 函数: torch.nn.L1Loss
import torch.nn as nn
loss_fn = nn.L1Loss()

2.分类任务的损失函数:

1.交叉熵损失(Cross-Entropy Loss)

  • 函数: torch.nn.CrossEntropyLoss
cross_entropy_loss = nn.CrossEntropyLoss()
  • 参数:reduction:mean-平均值,sum-总和

  • 适用场景: 用于多分类任务。

2.二元交叉熵损失(Binary Cross-Entropy Loss)

  • 函数: torch.nn.BCELoss 或 torch.nn.BCEWithLogitsLoss
bce_loss = nn.BCELoss()
bce_with_logits_loss = nn.BCEWithLogitsLoss()
  • 适用场景: 用于二分类任务。

  • 特点: BCEWithLogitsLoss 更稳定,因为它结合了 Sigmoid 激活函数和 BCE 损失。

  • 注意:使用 nn.BCELoss 时,需要确保预测值经过 sigmoid 函数处理。如果预测值是 logits(即未经 sigmoid 处理的预测值),可以使用 nn.BCEWithLogitsLoss,它内部会自动应用 sigmoid 函数。

优化器

官方文档:https://pytorch.org/docs/stable/optim.html

在PyTorch中,优化器(Optimizer)是用于更新模型参数以最小化损失函数的核心工具。

PyTorch 在 torch.optim 模块中提供了多种优化器,常用的包括:

  • SGD(随机梯度下降)
  • Adagrad(自适应梯度)
  • RMSprop(均方根传播)
  • Adam(自适应矩估计)

核心方法有:

zero_grad():清空模型参数的梯度(将梯度置零)。必须在loss.backward()之前调用zero_grad(),避免梯度累积。

step():参数更新;是优化器的核心方法,用于根据计算得到的梯度更新模型参数。优化器会根据梯度和学习率等参数,调整模型的权重和偏置。

以SGD(随机梯度下降)优化器为例:

import torch
import torch.nn as nn
import torch.optim as optim# 优化方法SGD的学习
def test003():model = nn.Linear(20, 60)criterion = nn.MSELoss()# 优化器:更新模型参数optimizer = optim.SGD(model.parameters(), lr=0.01)input = torch.randn(128, 20)output = model(input)# 计算损失及反向传播loss = criterion(output, torch.randn(128, 60))# 梯度清零optimizer.zero_grad()# 反向传播loss.backward()# 更新模型参数optimizer.step()print(loss.item())if __name__ == "__main__":test003()
  • optim.SGD():优化器方法;是 PyTorch 提供的随机梯度下降(Stochastic Gradient Descent, SGD)优化器。
  • model.parameters():模型参数获取;是一个生成器,用于获取模型中所有可训练的参数(权重和偏置)。

注意:这里只是组件认识和用法演示,没有具体的模型训练功能实现

http://www.dtcms.com/a/318946.html

相关文章:

  • Django 表单:深度解析与最佳实践
  • 高性能分布式通信框架:eCAL 介绍与应用
  • 解锁高效开发:AWS 前端 Web 与移动应用解决方案详解
  • 区块链技术原理(2) -数据结构
  • 云平台运维工具 ——AWS 原生工具
  • 告别Cursor!最强AI编程辅助Claude Code安装到使用全流程讲解
  • MySQL面试题及详细答案 155道(061-080)
  • 【图文教程】三步用Cpolar+JuiceSSH实现手机远程连接内网Linux虚拟机
  • 平台服务器被入侵,使用WAF能防范吗?
  • 机器学习——04 逻辑回归
  • LoRaWAN的网络拓扑
  • graalvm初探
  • 急危重症专科智能体”构建新一代急诊、手术与重症中心的AI医疗方向探析
  • DBeaver 25.1.0 转储数据库失败解决方案(适配最新版界面)
  • Android Auto开发指南
  • concurrentqueue:一个高并发高性能的C++无锁队列
  • Oracle exp imp expdp impdp 命令详解
  • 无人机光伏巡检效率提升68%!陌讯动态融合算法实战解析
  • 模拟-38.外观数列-力扣(LeetCode)
  • 成就非凡:如何识别并服务那些注定成功的软件客户-优雅草卓伊凡
  • 正向矩阵(DCT)变换后还是一个矩阵,怎么减少存储空间
  • 软件加密工具-DSProtector使用说明
  • Adobe最新+MAC系统+系统+教程 软件+课程
  • 计算机视觉(opencv)——图像本质、数字矩阵、RGB + 基本操作(实战一)
  • 酉矩阵(Unitary Matrix)和随机矩阵
  • 在开发板上画出一个2048棋盘的矩阵
  • Jenkins全链路教程——Jenkins用户权限矩阵配置
  • 什么是键值缓存?让 LLM 闪电般快速
  • 面向远程智能终端的超低延迟RTSP|RTMP视频SDK架构与实践指南
  • 动手学深度学习(pytorch版):第一节——引言