线性回归实现

type
status
date
slug
summary
tags
category
icon
password
 
💡
记录毫无逻辑,仅供自己参考。2024-12-15

线性回归训练流程

对于每一个小批量,我们会进行以下步骤:
  • 通过调用net(X)生成预测并计算损失l(前向传播)。
  • 通过进行反向传播来计算梯度。
  • 通过调用优化器来更新模型参数。
 
label:所预测的东东实际是什么(可理解为结论),如线性回归中的 y 变量,如分类问题中图片中是猫是狗(或图片中狗的种类)、房子未来的价格、音频中的单词等等任何事物,都属于Label。
特征:特征是事物固有属性,可理解为做出某个判断的依据,如人的特征有长相、衣服、行为动作等等,一个事物可以有N多特征,这些组成了事物的特性,作为机器学习中识别、学习的基本依据。

torch是如何加载数据的

数据→Dataset→Dataloader→训练
notion image
Dataset from torch.utils.data import Dataset :如何获取每一个数据和label,一共有多少数据。
TensorDataset 是 PyTorch 提供的一种数据结构,它接收多个张量(通常是特征和标签)并将它们打包成一个数据集。 DataLoader 是 PyTorch 中的一个类,用于从 TensorDataset 中按批次(batch)加载数据。它是模型训练和验证过程中获取数据的主要方式。 iter 是一个 Python 内置函数,用来将可迭代对象(如列表、元组或迭代器等)转换为迭代器。 DataLoader 本身就是一个可迭代对象。通过 iter() 可以得到一个迭代器,之后可以用 next(data_iter) 获取数据的下一个批次(batch)。
nntorch 包中的一个子模块,提供了构建神经网络所需的各类功能。你可以将其视为一个神经网络相关操作的工具箱,包含了层(如卷积层、线性层、激活函数等)、损失函数、优化器等。 nn.Sequential(): 这是一个容器模块,用于将多个神经网络层按照顺序组合在一起。在 Sequential 中,层会按添加顺序逐一连接,输入的数据会依次通过每一层进行处理。它的作用是简化神经网络的构建,使得不需要显式地定义每一层的前向传播函数。 全连接层(Fully Connected Layer):是神经网络中的一种常见层类型,每个输入特征都会与每个输出特征相连(即“全连接”)。在这种层中,每个输入都与权重矩阵的每一行相乘,并加上一个偏置项,然后通过激活函数生成输出。 nn.Linear 类用于定义这种类型的全连接层。nn.Linear 本质上是一个执行线性变换的层, 在 net = nn.Sequential(nn.Linear(2, 1)) 这行代码中,nn.Linear(2, 1) 嵌套在 nn.Sequential() 中的原因是 nn.Sequential 是用来构建一个神经网络模型的容器,它将多个神经网络层(如 Linear 层)按顺序组织在一起。 模型变量net,它是一个Sequential类的实例。
torch.optim.SGD 是 PyTorch 中实现 小批量随机梯度下降(Stochastic Gradient Descent, SGD) 优化算法的类。相比于传统的 批量梯度下降(Batch Gradient Descent),SGD 每次只用一个小批量数据来更新模型,因此计算量更小,且能更快地找到一个好的解。 net.parameters() 是一个方法,它返回模型 net 中的所有可训练参数(例如,权重和偏置)。这些参数将在训练过程中被优化。 API(Application Programming Interface)(应用程序编程接口) 是指 深度学习框架 提供的接口或工具集,用于简化和加速模型构建、训练和评估过程。API 提供了一些高级功能,使得用户能够更容易地构建和训练深度学习模型,而无需从零开始编写所有底层的实现。

data模块 torch.utils.data

Dataset

通过继承类,创建自定义的数据集。实现两个关键方法:
  • __len__方法:返回数据集的大小
  • __getitem__方法:根据给定的索引检索样本
class CustomDataset (Dataset):

Dataloader

封装了数据集并提供了一个可迭代对象。它简化了批量加载、数据shuffling和并行数据处理等操作,是训练和评估模型时高效输入数据的关键。
主要功能包括:
  • 批量加载数据
  • 自动shuffling数据
  • 多进程数据加载以提高效率
  • 自定义数据采样策略

Subset

可以从一个大型数据集中创建一个较小的、特定的子集。
  • 使用数据子集进行实验
  • 将数据集分割为训练集、验证集和测试集

ConcatDataset

用于将多个数据集组合成一个单一的数据集。当有多个需要一起使用的数据集时,这个工具非常有用。
  • 合并来自不同来源的数据
  • 创建更大、更多样化的训练集

TensorDataset

当数据已经以张量形式存在时,它将张量包装成一个数据集对象,使得处理预处理的特征和标签变得简单。
  • 直接使用张量数据
  • 简化了已经预处理数据的使用流程

RandomSampler

用于从数据集中随机采样元素。在使用随机梯度下降(SGD)等需要随机采样的训练方法时,这个工具尤为重要。
  • 增加训练的随机性
  • 减少模型过拟合的风险

WeightedRandomSampler

基于指定的概率(权重)进行有放回采样。这在处理不平衡数据集时特别有用,因为它可以:
  • 更频繁地采样少数类
  • 平衡类别分布,提高模型对少数类的敏感度

nn模块

nn模块提供了创建和训练神经网络的各种工具,其专门为深度学习设计,核心的数据结构是Module。Module是一个抽象的概念,既可以表示神经网络中的某个层,也可以表示一个包含很多层的神经网络。
nn.Module基类构造函数:
training: 对于一些在训练和测试阶段采用策略不同的层如Dropout和BathNorm,通过training值决定前向传播策略。 _parameters: 用来保存用户直接设置的parameter。 _buffers: 缓存。 *_hooks: 存储管理hooks函数,用来提取中间变量。 _modules: 子module
实际使用中,最常见的做法是继承nn.Module来撰写自定义的网络层,
自定义层必须继承nn.Module,并且在其构造函数中需要调用nn.Module的构造函数。 必须在构造函数__init__中定义可学习参数。 使用forward函数实现前向传播过程。 无须写反向传播函数,nn.Module能够利用autograd自动实现反向传播。 Moudle中的可学习参数可以通过named_parameters()或者parameters()返回迭代器。??
class Linear(nn.Module):
 
在函数定义中,*可以用来解包位置参数。这使得函数可以接受不定数量的位置参数,将它们打包成一个元组。 **用于解包关键字参数,将它们打包成一个字典。 iter() 函数返回一个迭代器对象。 next() 函数会从迭代器中获取下一个元素。
预备知识信息生物学可能内容总结
Loading...
Catalog