当前位置:   article > 正文

深度学习pytorch学习笔记(基于ChatGPT)记录_num_epochs

num_epochs

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

ChatGPT作为一款搜索软件,实际体验非常棒,能够迅速返回你想要的查找结果,给出具体代码实例,并作详细的解释。最关键的是,没有那些令人汗颜的广告和复制粘贴营销号,体感已经薄纱了某度和某dn。本文仅记录ChatGPT的提问记录,用做知识点笔记。具体访问ChatGPT的方法未知,我本人是找川普兄弟帮我上ChatGPT查的。


提示:以下是本篇文章正文内容,下面案例可供参考

一、深度学习超参数num_epochs的含义

在深度学习中,超参数(hyperparameters)是指那些需要手动设置的参数,而不是由模型学习得到的参数。其中,num_epochs 是一个常见的超参数,用于指定训练过程中迭代的次数。

具体来说,每次训练时,模型会将整个数据集分成若干个批次(batches)进行训练,每个批次包含一定数量的样本。num_epochs 就是指定了模型要遍历整个数据集的次数,也就是训练的轮数。在每一轮训练中,模型会使用不同的批次进行参数更新,直到达到指定的轮数或达到预设的停止条件。

通常情况下,num_epochs 是一个需要手动设置的超参数,因为训练的轮数需要根据具体的数据集和模型来进行调整。如果设置得太小,模型可能无法充分学习数据集中的特征;如果设置得太大,可能会导致过拟合或训练时间过长。因此,需要根据实验结果来进行调整,找到一个最优的 num_epochs 值,使得模型在训练集和测试集上都能取得较好的性能

二、next函数从迭代器取值时,返回Ellipsis

在 Python 中,next 函数用于从迭代器中获取下一个值。如果在使用 next 函数时,迭代器已经到达了末尾,那么会抛出 StopIteration 异常。如果在迭代器中存在 Ellipsis,那么在调用 next 函数时,它会返回 Ellipsis 这个对象本身,而不是将其视为一个元素。

下面是一个简单的示例代码,演示了如何在迭代器中使用 Ellipsis:

my_list = [1, 2, 3, Ellipsis, 5]

my_iterator = iter(my_list)

for i in range(6):
    try:
        value = next(my_iterator)
        print(f"Value {i}: {value}")
    except StopIteration:
        print("End of iterator")
        break

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

在这个示例中,我们创建了一个包含 Ellipsis 的列表 my_list,然后将其转换为一个迭代器 my_iterator。接着,我们使用一个循环,调用 next 函数来逐个获取迭代器中的元素。当迭代器到达末尾时,我们捕获了 StopIteration 异常并跳出循环。

运行上面的代码会得到如下输出:

Value 0: 1
Value 1: 2
Value 2: 3
Value 3: Ellipsis
Value 4: 5
End of iterator

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

从输出结果可以看出,在第四个值处,next 函数返回了 Ellipsis 对象本身,而不是将其视为一个元素。

torch中dataloader函数的作用

在 PyTorch 中,torch.utils.data.DataLoader 是一个数据加载器,它可以自动将数据划分为批次并进行批量加载,同时还支持数据的多线程预处理和数据集的随机打乱等功能。DataLoader 的作用是将数据集封装为一个迭代器,方便进行批量训练。
具体来说,DataLoader 主要有以下几个作用:

  1、 批量加载数据:DataLoader 可以自动将数据划分为批次,并在每个批次中加载一定量的数据,方便进行批量训练。
 2、   多线程预处理:DataLoader 支持多线程预处理,可以在数据加载时自动对数据进行预处理,加快数据加载速度。
 3、   数据集随机打乱:DataLoader 支持对数据集进行随机打乱,可以避免模型对数据的顺序敏感,从而提高模型的泛化能力。
 4、   数据集重复使用:DataLoader 可以重复使用数据集,即在一个 epoch 中多次使用数据集,方便进行模型的多次训练。
  • 1
  • 2
  • 3
  • 4

DataLoader 可以与 Dataset 结合使用,Dataset 可以表示数据集,而 DataLoader 可以对 Dataset 进行包装,方便进行数据的批量加载和预处理等操作。在使用 DataLoader 时,通常需要设置数据集、批大小、是否打乱数据等参数,以及数据加载的线程数、是否启用 GPU 等参数。

dataloader的参数列表

torch.utils.data.DataLoader 函数的参数列表如下:

class torch.utils.data.DataLoader(
    dataset,
    batch_size=1,
    shuffle=False,
    sampler=None,
    batch_sampler=None,
    num_workers=0,
    collate_fn=None,
    pin_memory=False,
    drop_last=False,
    timeout=0,
    worker_init_fn=None,
    multiprocessing_context=None,
)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

其中,各参数的含义如下:

dataset:数据集,必须是一个 torch.utils.data.Dataset 类的对象。
batch_size:每个批次的大小,默认为 1。
shuffle:是否对数据进行随机打乱,默认为 False。
sampler:用于数据采样的采样器,如果指定,则会忽略 shuffle 参数。
batch_sampler:用于批次采样的采样器,如果指定,则会忽略 batch_size、shuffle 和 sampler 参数。
num_workers:数据加载时使用的子进程数,默认为 0,表示不使用子进程,使用主进程加载数据。
collate_fn:用于批次加载数据时对样本进行处理的函数,默认为 None,表示不对样本进行处理。
pin_memory:是否将数据加载到 CUDA 的固定内存中,默认为 False,表示不使用 CUDA 固定内存。
drop_last:当数据不能完全分为一个批次时,是否丢弃最后一个不完整的批次,默认为 False,表示保留最后一个不完整的批次。
timeout:数据加载的超时时间,默认为 0,表示不启用超时机制。
worker_init_fn:用于初始化数据加载进程的函数,默认为 None,表示不进行初始化。
multiprocessing_context:用于创建数据加载进程的上下文,默认为 None,表示使用默认的上下文。可以通过指定 multiprocessing.get_context() 函数返回的上下文来修改默认的上下文,例如使用 multiprocessing.get_context('spawn') 可以创建基于进程的上下文。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

需要注意的是,shuffle 和 sampler 参数不能同时指定,否则会抛出异常。如果指定了 batch_sampler 参数,则会忽略 batch_size、shuffle 和 sampler 参数。当 num_workers 大于 0 时,需要注意数据集的线程安全性,确保数据集在多个进程中可以正确地访问。如果数据集不是线程安全的,则需要在创建数据集时进行相关的处理。

torch.optim.SGD函数

torch.optim.SGD 是 PyTorch 中实现随机梯度下降(Stochastic Gradient Descent,SGD)优化算法的函数。

函数的定义如下:

class torch.optim.SGD(params, lr=<required parameter>, momentum=0, dampening=0, weight_decay=0, nesterov=False)
  • 1

其中,各参数的含义如下:

params:需要进行优化的参数(张量),可以通过 model.parameters() 方法获取。
lr:学习率,必须设置为一个大于 0 的值,用于控制每次更新的步长。
momentum:动量系数,默认为 0,表示不使用动量。当设置为非零值时,表示在梯度下降时,将上一次更新的方向(动量)考虑进去,可以增加模型在训练过程中的稳定性,并减少震荡。
dampening:动量的抑制系数,默认为 0,表示不抑制。当设置为非零值时,表示在计算动量的过程中进行抑制,可以减少震荡。
weight_decay:权重衰减系数(也称为 L2 正则化系数),默认为 0,表示不使用权重衰减。
nesterov:是否使用 Nesterov 动量,默认为 False,表示不使用 Nesterov 动量。当设置为 True 时,表示在计算梯度时先将动量加入到梯度中,再计算梯度。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

torch.optim.SGD 函数返回一个优化器对象,可以通过调用优化器对象的 step() 方法来更新模型的参数,通过调用 zero_grad() 方法来清空模型参数的梯度。

例如,下面的代码演示了如何使用 torch.optim.SGD 函数来优化模型的参数:

import torch
import torch.optim as optim

# 定义模型
model = torch.nn.Linear(10, 1)

# 定义优化器
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)

# 计算损失和梯度
inputs = torch.randn(1, 10)
labels = torch.randn(1, 1)
outputs = model(inputs)
loss = torch.nn.functional.mse_loss(outputs, labels)
loss.backward()

# 更新模型参数
optimizer.step()

# 清空梯度
optimizer.zero_grad()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

nn.MSELoss

nn.MSELoss() 是 PyTorch 中实现均方误差(Mean Squared Error,MSE)损失函数的类。

nn.MSELoss() 的定义如下:

class torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')

  • 1
  • 2

其中,各参数的含义如下:

size_average:已弃用,不再使用。
reduce:已弃用,不再使用。
reduction:指定损失函数的计算方式,可选值为:'none'、'mean'、'sum'。如果设置为 'none',则返回每个样本的损失值;如果设置为 'mean',则返回所有样本的平均损失值;如果设置为 'sum',则返回所有样本的总损失值。
  • 1
  • 2
  • 3

nn.MSELoss() 可以用于回归任务中,计算模型的预测值和实际值之间的均方误差。
例如,下面的代码演示了如何使用 nn.MSELoss() 来计算模型的损失:

import torch

# 定义模型
model = torch.nn.Linear(10, 1)

# 计算损失
inputs = torch.randn(1, 10)
labels = torch.randn(1, 1)
outputs = model(inputs)
criterion = torch.nn.MSELoss()
loss = criterion(outputs, labels)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

总结

看似都很基础的问题,网上都有详尽的问答,然而在过去要想在答辩般的国内搜索引擎中查询到这些信息,不知道得话多少心思和精力!什么莆田医院、编程培训班、原神、传奇一刀999,以及一堆复制粘贴不知所云的营销号文章,根本无从下手!逛一会就把人给逛晕了,还查啥!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/260755
推荐阅读
相关标签
  

闽ICP备14008679号