soft回归用内置函数

[复制链接]
发表于 2025-10-10 19:20:40 | 显示全部楼层 |阅读模式
动手学深度学习v2-3.7-学习-条记
  1. import torch
  2. from torch import nn
  3. from d2l import torch as d2l
  4. batch_size = 256
  5. train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
复制代码
分析:引入库,设置批量巨细,加载Fashion MNIST数据集

  •         torch:PyTorch 是一个盛行的深度学习框架,提供了张量利用、主动求导等功能
  •         nn:PyTorch 的神经网络模块,包罗各种神经网络层和模块。
  •         d2l:d2l 是李沐等人编写的《动手学深度学习》(Dive into Deep Learning)配套的 Python 包。它提供了很多方便的工具函数,包罗数据加载、画图等。
  •         batch_size:批量巨细(batch size)是指每次练习时输入模子的数据样本数量。这里设置为 256,意味着每次练习时会从数据会集抽取 256 个样本构成一个批量。
           
             
    1. # PyTorch不会隐式地调整输入的形状。因此,
    2. # 我们在线性层前定义了展平层(flatten),来调整网络输入的形状
    3. net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
    4. def init_weights(m):
    5.     if type(m) == nn.Linear:
    6.         nn.init.normal_(m.weight, std=0.01)
    7. net.apply(init_weights);
    复制代码
    分析:界说一个简单的数据集,初始化权重
  •         nn.Flatten():这是一个展平层,用于将输入数据从多维张量展平为一维张量。比方,对于 Fashion MNIST 数据集,输入图像的形状是 (28, 28),颠末 nn.Flatten() 后,会酿成形状为 (784,) 的一维张量。
  •         nn.Linear(784, 10):这是一个全毗连层(线性层)。它将输入的 784 个特性(展平后的图像数据)映射到 10 个输出种别(Fashion MNIST 数据集有 10 个种别)。
  •         if type(m) == nn.Linear:判定当前层是否是全毗连层(nn.Linear)。假如是,则对该层的权重举行初始化
  •         nn.init.normal_(m.weight, std=0.01):利用正态分布初始化权重。std=0.01 体现权重的初始化尺度差为 0.01。正态分布初始化是一种常见的权重初始化方法,有助于克制梯度消散或爆炸标题。
             
    1. loss = nn.CrossEntropyLoss(reduction='none')
    复制代码
    分析:nn.CrossEntropyLoss 是一个常用的丧失函数,用于多分类标题。它团结了 nn.LogSoftmax 和 nn.NLLLoss(负对数似然丧失)的功能,可以或许盘算模子输出的概率分布与真实标签之间的交错熵丧失。
    1. trainer = torch.optim.SGD(net.parameters(), lr=0.1)
    复制代码
    分析:torch.optim.SGD 是 PyTorch 提供的一个优化器类,用于实现随机梯度降落算法。SGD 是一种常用的优化算法,通过迭代更新模子参数,以最小化丧失函数
  •         net:体现界说好的神经网络模子。
  •         net.parameters():返回模子中全部可练习的参数(权重和偏置)。这些参数是 PyTorch 的 torch.nn.Parameter 对象,它们会被优化器用来更新模子。
  1. import torchfrom torch import nnfrom d2l import torch as d2l# 界说网络net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))# 初始化权重def init_weights(m):    if type(m) == nn.Linear:        nn.init.normal_(m.weight, std=0.01)net.apply(init_weights);# 加载数据集batch_size = 256train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)# 界说丧失函数
  2. loss = nn.CrossEntropyLoss(reduction='none')  # 大概利用 reduction='mean'# 界说优化器
  3. trainer = torch.optim.SGD(net.parameters(), lr=0.1)# 练习模子num_epochs = 10for epoch in range(num_epochs):    net.train()  # 将模子设置为练习模式    total_loss = 0.0    for X, y in train_iter:        y_hat = net(X)  # 前向流传        l = loss(y_hat, y).sum()  # 对丧失值求和,使其成为一个标量        l.backward()  # 反向流传        trainer.step()  # 更新参数        trainer.zero_grad()  # 清空梯度        total_loss += l.item()    print(f'Epoch {epoch + 1}, Loss: {total_loss / len(train_iter.dataset)}')
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表