深度学习(3):Tensor和Optimizer

是什么

Tensor(张量):在 PyTorch 中,Tensor 是一种多维数组, 可以在 GPU 上进行高效的数值计算。

Optimizer(优化器):在 PyTorch 中,优化器负责管理和更新模型的参数,特别是在训练过程中根据计算出的梯度来更新参数以最小化损失函数。

Tensor

1. Tensor 的基本概念

  • 定义:Tensor 是 PyTorch 中的基本数据结构,表示多维数组。
  • 创建:使用 torch.tensor() 或其他方法(如 torch.zeros()torch.ones() 等)创建。
  • 属性
    • data:Tensor 的数据部分。
    • grad:Tensor 的梯度,只有当 requires_grad = True 时,才会在反向传播后被赋值。
    • requires_grad:是否需要对该 Tensor 计算梯度,默认值为 False

2. 自动求导(Autograd)机制

  • 计算图:PyTorch 通过记录 Tensor 的操作,构建一个有向无环图(DAG),称为计算图。
  • 反向传播:调用 loss.backward(),PyTorch 会自动计算损失对所有叶子节点的梯度。
  • 梯度累积:在默认情况下,梯度会在每次反向传播中累积,需要手动清零。

3. requires_grad 属性

  • 作用:指定 Tensor 是否需要计算梯度。
  • 设置方法:在创建 Tensor 时,通过参数 requires_grad=True,或者在已有的 Tensor 上设置 tensor.requires_grad = True

4. .data.item()

  • .data
    • tensor.data:获取 Tensor 的数据部分,不会影响计算图的构建。
    • 这个地方得注意,在老版本里面可以使用,但新版本里面有时候会导致梯度计算出现问题,一般使用使用 with torch.no_grad(): 块来避免计算图的影响
  • .item()
    • 作用:将单元素 Tensor 转换为 Python 数值。
    • 用途:用于打印、记录损失值或中间结果。

5. 梯度清零

  • 原因:防止梯度累积,确保每次反向传播计算的梯度是针对当前样本或批次的。
  • 方法
    • w.grad.data.zero_():将梯度清零。

Optimizer

优化器位于 torch.optim 包中,是实现各种优化算法的核心组件。它们的主要功能是调整网络参数以减少计算出的损失值。每一个优化器都继承自 torch.optim.Optimizer,并实现特定的优化策略。

使用主要包括三个步骤:计算梯度、执行参数更新和清除梯度。

import torch
import torch.nn as nn
import torch.optim as optim

model = nn.Linear(10, 2)  # 示例模型
criterion = nn.MSELoss()  # 损失函数
optimizer = optim.Adam(model.parameters(), lr=0.001)  # 初始化优化器

for inputs, targets in data_loader:
    optimizer.zero_grad()   # 清除过去的梯度
    outputs = model(inputs)  # 前向传播
    loss = criterion(outputs, targets)  # 计算损失
    loss.backward()  # 反向传播,计算当前梯度
    optimizer.step()  # 根据梯度更新参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值