网站的横幅怎么做/windows优化软件哪个好

网站的横幅怎么做,windows优化软件哪个好,地方网站怎么做推广,销售系统管理软件免费总结:学习了 PyTorch 中的基本概念和常用功能,张量(Tensor)的操作、自动微分(Autograd)、正向传播、反向传播。通过了解认识LeNet 模型,定义神经网络类,熟悉卷积神经网络的基本结构和…

总结:学习了 PyTorch 中的基本概念和常用功能,张量(Tensor)的操作、自动微分(Autograd)、正向传播、反向传播。通过了解认识LeNet 模型,定义神经网络类,熟悉卷积神经网络的基本结构和训练过程,卷积层和全连接层的创建和运用。在训练网络中,通过反向传播计算梯度,利用优化器根据计算出的梯度更新网络中的参数。--2025/02/12

目录

1. 实验环境

1.1. 导入库

1.2. 版本

2. 基本概念

2.1. Tensor 张量

2.2. Scalar 标量

2.3. Autograd 自动微分

2.3.1. 启动自动微分

2.3.2. 反向传播

2.3.3. 梯度累加和清零

3. LeNet 神经网络

3.1. 基本概念

3.1.1. torch.nn

3.1.2. nn.Module 类

3.1.3. 卷积层 (nn.Conv2d)

3.1.4. 全连接层 (nn.Linear)

3.2. 定义神经网络类 Net

3.2.1 __init__ 构造函数

3.2.2. forward 向前传播函数

3.3. 训练网络

3.3.1. 可学习参数

3.3.2. 批量处理(Mini-Batch)

3.3.3. 损失函数

3.3.4. 反向传播

3.3.5. 优化器:SGD

总结


1. 实验环境

1.1. 导入库
  • Import numpy as np: 用于处理数组和矩阵运算

    Import torch as t :pytorch的核心库,构建和训练深度学习模型

    import torch.optim as optim:pytorch的优化器模块,根据计算出的梯度更新神经网络的参数

    import torch.nn as nn:PyTorch 提供的神经网络模块,专门用于构建和训练神经网络模型

    import torch.nn.functional as F:包含函数操作,如激活函数、损失函数、卷积操作等)

1.2. 版本
  • torch:2.6.0

    Python 3.8.8

    jupyter-notebook : 6.3.0


2. 基本概念

2.1. Tensor 张量

Tensor是PyTorch中重要的数据结构,可认为是一个高维数组。它可以是一个数(标量)、一维数组(向量)、二维数组(矩阵)以及更高维的数组。

  • 标量(0 维):一个数值,例如 3.14。
  • 向量(1 维):一组有序的数值,例如 [1, 2, 3]。
  • 矩阵(2 维):一个二维的数值表格,例如 [[1, 2], [3, 4]]。
  • 高维数组(n 维):更高维的数组,用于存储更复杂的数据结构,例如图像数据(通常为 4 维:batch_size, channels, height, width)。
# 初始化一个 5x3 的张量
x = t.Tensor(5, 3)# 赋值为一个 2x2 的初始化矩阵
x = t.Tensor([[1, 2], [3, 4]])# 获取张量的行数(即第一个维度)
x.size(0)# 获取张量的列数(即第二个维度)
x.size(1)# 获取列数的另一种方式
x.size()[1]# 随机生成一个 5x3 的张量
x = t.rand(5, 3)
y = t.rand(5, 3)# 三种方法来进行两个矩阵相加:
a = x + y  # 方法 1:直接相加
b = t.add(x, y)  # 方法 2:使用 PyTorch 自带的加法函数
c = t.Tensor(5, 3)  # 初始化一个空张量
t.add(x, y, out=c)  # 方法 3:将结果存储到 c 中

Tensor 与 NumPy 的转换

# 创建一个全为 1 的张量
a = t.ones(5)# 将张量转换为 NumPy 数组
b = a.numpy()# 创建一个全为 1 的 NumPy 数组
a = np.ones(5)# 将 NumPy 数组转换为张量
b = t.from_numpy(a)

2.2. Scalar 标量

Scalar(标量)是一个没有维度的单一数值,它是零维的张量。标量在 PyTorch 中通常表示为一个只有一个元素的 Tensor。

2.2.1. 获取标量值

(1) 使用 .item() 从包含单一元素的张量中提取该元素的值:

(2) 使用 .tolist() 将标量张量转换为列表:

# 使用 item() 方法获取标量值
scalar = b[0]
scalar_value = scalar.item()# 使用 tolist() 方法将标量张量转换为列表
x = t.Tensor([3.14])  # 创建一个包含单一值的张量
scalar_list = x.tolist()  # 将其转换为列表
print(scalar_list)  # 输出: [3.14]

2.3. Autograd 自动微分

深度学习中的训练过程本质上是通过反向传播求导数,而 PyTorch 提供的 autograd 模块自动为张量计算梯度,从而避免了手动计算导数的复杂过程。

2.3.1. 启动自动微分

在创建张量时,可以通过 requires_grad=True 来启动自动微分功能,表示该张量需要计算梯度。

x = t.ones(2, 2, requires_grad=True)  # 创建一个可以计算梯度的张量
2.3.2. 反向传播

反向传播通过调用 backward() 来计算梯度。以下示例展示了如何计算梯度:


2.3.3. 梯度累加和清零

在每次执行 backward() 之后,PyTorch 会将梯度值累加,因此每次反向传播之前需要手动清零梯度。

#清零梯度,以下划线结束的函数是inplace操作,修改自身的值
x.grad.zero_()


3. LeNet 神经网络

LeNet 是一种经典的卷积神经网络(CNN)结构,广泛应用于图像分类任务。LeNet 模型通常由两个卷积层、两个池化层以及三个全连接层组成。

3.1. 基本概念
3.1.1. torch.nn

torch.nn 是 PyTorch 中专门为构建神经网络设计的模块,封装了构建和训练神经网络所需的大量工具,包括各种层(如卷积层、全连接层、激活函数等)和常用的操作(如损失函数、优化器等)。

3.1.2. nn.Module

nn.Moduletorch.nn 中最重要的类,所有的神经网络模型都应该继承自 nn.Module。我们可以通过继承 nn.Module 来定义自己的网络模型。在继承 nn.Module 时,需要定义以下两个方法:

  • __init__:用于定义模型的结构,初始化网络的各个层。
  • forward:定义前向传播,描述数据如何通过网络流动。
3.1.3. 卷积层 (nn.Conv2d)

卷积层用于从输入数据中提取空间特征nn.Conv2d 用于定义二维卷积层。它的常用参数包括:

  • in_channels:输入数据的通道数(例如,RGB图像的通道数为3,灰度图像为1)。
  • out_channels:卷积层输出的通道数(卷积核的数量)。
  • kernel_size:卷积核的大小,通常是一个整数或元组(height, width)。

# 卷积层 '1'表示输入通道数为1→灰度图像, '6'表示输出通道数→卷积核的数量,'5'表示卷积核为5*5
self.conv1 = nn.Conv2d(1, 6, 5) 
# 卷积层
self.conv2 = nn.Conv2d(6, 16, 5) 

3.1.4. 全连接层 (nn.Linear)

全连接层是神经网络中非常重要的一部分,主要用于将提取到的特征映射到最终的输出。nn.Linear 定义了一个全连接层,其常用参数为:

  • in_features:输入特征的数量。
  • out_features:输出特征的数量。

  # 仿射层/全连接层,y = Wx + b
        #16*5*5是卷积层输出的特征图像展平后的维度,表示每个样本通过卷积层处理后的大小。
        self.fc1   = nn.Linear(16*5*5, 120) 
        #120,84,10全连接层的输出维度。10表示模型的预测类别数。10类
        self.fc2   = nn.Linear(120, 84)
        self.fc3   = nn.Linear(84, 10)

3.2. 定义神经网络类 Net
import torch.nn as nn
import torch.nn.functional as F
#包含常见函数,比如激活函数relu,池化操作maxpool
class Net(nn.Module):#定义神经网络类Net,继承于nn.Moduledef __init__(self):#定义构造函数,用来定义网络各个层super(Net, self).__init__()#调用父类nn.module的构造函数# 卷积层 '1'表示输入图片为单通道的灰度图像, '6'表示输出通道数,'5'表示卷积核为5*5self.conv1 = nn.Conv2d(1, 6, 5) # 卷积层self.conv2 = nn.Conv2d(6, 16, 5) # 仿射层/全连接层,y = Wx + b#16*5*5是卷积层输出的特征图像展平后的维度,表示每个样本通过卷积层处理后的大小。self.fc1   = nn.Linear(16*5*5, 120) #120,84,10全连接层的输出维度。10表示模型的预测类别数。10类self.fc2   = nn.Linear(120, 84)self.fc3   = nn.Linear(84, 10)def forward(self, x): #定义向前传播# 卷积 -> 激活函数(ReLU) -> 池化(MaxPool)x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))#self.conv1(x):通过卷积层conv1,将输入x进行卷积操作#F.relu():relu激活函数,将输入的负值变为0,正值不变。#F.max_pool2d(...,(2,2)):最大池化操作,池化窗口大小2*2x = F.max_pool2d(F.relu(self.conv2(x)), 2) # reshape,展平数据,输入全连接层,‘-1’表示自适应x = x.view(x.size()[0], -1) #展平的数据进入全连接层,relu激活函数增加非线性#最后一层输出类别的预测值x = F.relu(self.fc1(x))x = F.relu(self.fc2(x))x = self.fc3(x)        return x
#创建Net对象,神经网络
net = Net()
#打印出网络的结构显示每一层参数
print(net)
Net((conv1): Conv2d(1, 6, kernel_size=(5, 5), stride=(1, 1))(conv2): Conv2d(6, 16, kernel_size=(5, 5), stride=(1, 1))(fc1): Linear(in_features=400, out_features=120, bias=True)(fc2): Linear(in_features=120, out_features=84, bias=True)(fc3): Linear(in_features=84, out_features=10, bias=True)
)
3.2.1 __init__ 构造函数

__init__ 方法中,我们定义了网络的各个层(卷积层、池化层、全连接层)。LeNet 网络一般包含两个卷积层和三个全连接层。

3.2.2. forward 向前传播函数

forward 方法中,我们定义了数据如何在网络中流动,包括卷积、池化、激活函数、展平和全连接层的应用。

3.3. 训练网络
3.3.1. 可学习参数
  • 权重(weight):网络中的参数,决定了输入和输出之间的关系,影响每一层的输出结果。
  • 偏置(bias):每个神经元的额外参数,与权重一起决定神经元的激活值。
3.3.2. 批量处理(Mini-Batch)

批量处理mini-batch:多个样本组成的小批量.
PyTorch 的神经网络层(如卷积层)要求输入的形状是一个 4D 张量(batch_size, channels, height, width)。
只想输入一个样本,input.unsqueeze(0)将batch_size设为1

3.3.3. 损失函数
  • 损失函数:衡量网络输出(预测值)与目标值之间的差距

    均方误差 (MSE, Mean Squared Error):用于回归问题,计算预测值与真实值之间的平均平方误差。

    交叉熵损失 (Cross-Entropy Loss):用于分类问题,衡量真实标签与预测概率分布之间的差异。

3.3.4. 反向传播

反向传播包括三个步骤:

  1. 正向传播:先通过前向传播计算出模型的输出和损失。
  2. 计算梯度:然后通过反向传播计算出每个参数的梯度。梯度的绝对值较大,该参数对损失有很大影响,需要大幅调整
  3. 参数更新:使用这些梯度来调整网络的参数,使得损失最小化。
#梯度变化
print('反向传播前conv1.bias偏置的梯度')
print(net.conv1.bias.grad)# 执行一次前向传播
output = net(input)
target = t.arange(0,10).view(1,10).float()
criterion = nn.MSELoss()# 计算损失
loss = criterion(output, target)# 执行反向传播(retain_graph=True)用于保留计算图
loss.backward(retain_graph=True)# 打印反向传播后的梯度
print('反向传播后conv1.bias偏置的梯度')
print(net.conv1.bias.grad)# 如果需要继续进行其他操作,记得清零梯度
net.zero_grad()

梯度的符号(正负)表示了参数调整的方向:

负梯度:表示 如果减小 当前参数的值,损失函数会减少。当前参数的值较大,应该减少它来减小损失。
正梯度:表示 如果增大 当前参数的值,损失函数会减少。意味着当前参数的值较小,应该增加它来减小损失。

3.3.5. 优化器:SGD

主要任务是 根据反向传播计算出的梯度更新网络中的参数(如权重和偏置),从而使得损失函数逐步降低,最终达到优化目标。

SGD(随机梯度下降)优化器
SGD 是最常见的一种优化器,它的基本思路是每次使用一个 mini-batch(小批量)计算梯度,并使用这个梯度更新网络参数。

import torch.optim as optim
#SGD随机梯度下降,创建优化器,将需要优化的参数传入优化器
#指定学习率learning rate
optimizer = optim.SGD(net.parameters(),lr = 0.01)
#先梯度清零
optimizer.zero_grad()
#前向传播
output = net(input)
#计算损失函数
loss = criterion(output,target)
#反向传播
loss.backward()
#更新参数
optimizer.step()

总结

  • LeNet 网络结构:包含卷积层、池化层、全连接层。
  • nn.Moduleforward:通过继承 nn.Module 和定义 forward 方法来实现网络结构。
  • 损失函数和优化器:通过损失函数(如交叉熵损失)和优化器(如 SGD)来训练网络。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/895586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件

1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法&#xff…

深入浅出Java反射:掌握动态编程的艺术

小程一言反射何为反射反射核心类反射的基本使用获取Class对象创建对象调用方法访问字段 示例程序应用场景优缺点分析优点缺点 注意 再深入一些反射与泛型反射与注解反射与动态代理反射与类加载器 结语 小程一言 本专栏是对Java知识点的总结。在学习Java的过程中,学习…

【算法与数据结构】并查集详解+题目

目录 一,什么是并查集 二,并查集的结构 三,并查集的代码实现 1,并查集的大致结构和初始化 2,find操作 3,Union操作 4,优化 小结: 四,并查集的应用场景 省份…

C语言简单练习题

文章目录 练习题一、计算n的阶乘bool类型 二、计算1!2!3!...10!三、计算数组arr中的元素个数二分法查找 四、动态打印字符Sleep()ms延时函数system("cls")清屏函数 五、模拟用户登录strcmp()函数 六、猜数字小游戏产生一个随机数randsrandRAND_MAX时间戳time() 示例 …

ShenNiusModularity项目源码学习(8:数据库操作)

ShenNiusModularity项目使用SqlSugar操作数据库。在ShenNius.Repository项目中定义了ServiceCollectionExtensions.AddSqlsugarSetup函数注册SqlSugar服务,并在ShenNius.Admin.API项目的ShenniusAdminApiModule.OnConfigureServices函数中调用,SqlSugar所…

MATLAB图像处理:图像特征概念及提取方法HOG、SIFT

图像特征是计算机视觉中用于描述图像内容的关键信息,其提取质量直接影响后续的目标检测、分类和匹配等任务性能。本文将系统解析 全局与局部特征的核心概念,深入讲解 HOG(方向梯度直方图)与SIFT(尺度不变特征变换&…

小白win10安装并配置yt-dlp

需要yt-dlp和ffmpeg 注意存放路径最好都是全英文 win10安装并配置yt-dlp 一、下载1.下载yt-dlp2. fffmpeg下载 二、配置环境三、cmd操作四、yt-dlp下视频操作 一、下载 1.下载yt-dlp yt-dlp地址 找到win的压缩包点下载,并解压 2. fffmpeg下载 ffmpeg官方下载 …

【技术解析】MultiPatchFormer:多尺度时间序列预测的全新突破

今天给我大家带来一篇最新的时间序列预测论文——MultiPatchFormer。这篇论文提出了一种基于Transformer的创新模型,旨在解决时间序列预测中的关键挑战,特别是在处理多尺度时间依赖性和复杂通道间相关性时的难题。MultiPatchFormer通过引入一维卷积技术&…

145,【5】 buuctf web [GWCTF 2019]mypassword

进入靶场 修改了url后才到了注册页面 注测后再登录 查看源码 都点进去看看 有个反馈页面 再查看源码 又有收获 // 检查$feedback是否为数组 if (is_array($feedback)) {// 如果是数组&#xff0c;弹出提示框提示反馈不合法echo "<script>alert(反馈不合法);<…

晶闸管主要参数分析与损耗计算

1. 主要参数 断态正向可重复峰值电压 :是晶闸管在不损坏的情况下能够承受的正向最大阻断电压。断态正向不可重复峰值电压 :是晶闸管只有一次可以超过的正向最大阻断电压,一旦晶闸管超过此值就会损坏,一般情况下 反向可重复峰值电压 :是指晶闸管在不损坏的情况下能够承受的…

el-select 设置宽度 没效果

想实现下面的效果&#xff0c;一行两个&#xff0c;充满el-col12 然后设置了 width100%,当时一直没有效果 解决原因&#xff1a; el-form 添加了 inline 所以删除inline属性 即可

一款利器提升 StarRocks 表结构设计效率

CloudDM 个人版是一款数据库数据管理客户端工具&#xff0c;支持 StarRocks 可视化建表&#xff0c;创建表时可选择分桶、配置数据模型。目前版本持续更新&#xff0c;在修改 StarRocks 表结构方面进一步优化&#xff0c;大幅提升 StarRocks 表结构设计效率。当前 CloudDM 个人…

数量5 - 平面图形、立体几何

目录 一、平面几何问题1.三角形2.其他图形二、立体几何与特殊几何1.表面积2.体积3.等比放缩(简单)4.几何最值(简单)5.最短路径一、平面几何问题 平面图形: 立体图形: 1.三角形 特殊直角

CAS单点登录(第7版)7.授权

如有疑问&#xff0c;请看视频&#xff1a;CAS单点登录&#xff08;第7版&#xff09; 授权 概述 授权和访问管理 可以使用以下策略实施授权策略以保护 CAS 中的应用程序和依赖方。 服务访问策略 服务访问策略允许您定义授权和访问策略&#xff0c;以控制对向 CAS 注册的…

53倍性能提升!TiDB 全局索引如何优化分区表查询?

作者&#xff1a; Defined2014 原文来源&#xff1a; https://tidb.net/blog/7077577f 什么是 TiDB 全局索引 在 TiDB 中&#xff0c;全局索引是一种定义在分区表上的索引类型&#xff0c;它允许索引分区与表分区之间建立一对多的映射关系&#xff0c;即一个索引分区可以对…

I.MX6ull-I2C

一,I2C总线介绍 I2C(Inter-Integrated Circuit 集成电路)总线是Philips公司在八十年代初推出的一种串行、半双工的总 线&#xff0c;主要用于近距离、低速的芯片之间的通信&#xff1b;I2C总线有两根双向的信号线&#xff0c;一根数据线SDA用于收 发数据&#xff0c;一根时钟线…

书籍推荐:《书法课》林曦

记得樊登老师说过&#xff0c;如果你想了解一个事物&#xff0c;就去读5本相关的书&#xff0c;你会比大部分人都更了解它。这是我读的第4本和“书法”有关的书&#xff0c;作为一个零基础的成年人&#xff0c;林曦这本《书法课》非常值得一读。&#xff08;无论你是否写字&…

【大疆无人机地图测绘技术学习:高精度、高效率的全流程解决方案】

文章目录 大疆无人机地图测绘算法详解一、数据采集&#xff08;一&#xff09;飞行平台与传感器&#xff08;二&#xff09;航线规划&#xff08;三&#xff09;数据类型 二、数据处理与建模&#xff08;一&#xff09;数据导入与预处理&#xff08;二&#xff09;空三计算&…

工具资料+H3C 交换机常见故障分析排查+高危操作

当我们从客户那里接到一个故障时,我们根据现象让客户收集一堆信息,然后集成商、代理商、设备厂家一级一级的反复咨询与确认,天天经历这样的场景。几乎每个故障我们都要经过多个层级的人处理,信息的交流占据了每个人大部分的时间,反复的收集信息与确认问题现象也会让客户不厌其烦…

STM32:USB 虚拟串口以及使用usb->dfu进行iap

本文介绍stm32上usb的常用功能虚拟串口和DFU(Download Firmware Update) 文章目录 前言一、usb二、虚拟串口1.cubemx配置1.我们选用高速usb&#xff0c;然后选择内部低速的phy&#xff0c;这样使用的usb&#xff0c;最高速度为12Mbit每秒。2.USB_DEVICE cdc类配置3.时钟配置&am…