解决问题
蛋白模拟
小小编程
机器学习
要看文献
成长思考
自娱自乐
线性回归实现
type
status
date
slug
summary
tags
category
icon
password
记录毫无逻辑,仅供自己参考。2024-12-15
线性回归训练流程
对于每一个小批量,我们会进行以下步骤:
- 通过调用
net(X)
生成预测并计算损失l
(前向传播)。
- 通过进行反向传播来计算梯度。
- 通过调用优化器来更新模型参数。
label:所预测的东东实际是什么(可理解为结论),如线性回归中的 y 变量,如分类问题中图片中是猫是狗(或图片中狗的种类)、房子未来的价格、音频中的单词等等任何事物,都属于Label。
特征:特征是事物固有属性,可理解为做出某个判断的依据,如人的特征有长相、衣服、行为动作等等,一个事物可以有N多特征,这些组成了事物的特性,作为机器学习中识别、学习的基本依据。
torch是如何加载数据的
数据→Dataset→Dataloader→训练

Dataset
from torch.utils.data import Dataset
:如何获取每一个数据和label,一共有多少数据。TensorDataset
是 PyTorch 提供的一种数据结构,它接收多个张量(通常是特征和标签)并将它们打包成一个数据集。
DataLoader
是 PyTorch 中的一个类,用于从 TensorDataset
中按批次(batch)加载数据。它是模型训练和验证过程中获取数据的主要方式。
iter
是一个 Python 内置函数,用来将可迭代对象(如列表、元组或迭代器等)转换为迭代器。
DataLoader
本身就是一个可迭代对象。通过 iter()
可以得到一个迭代器,之后可以用 next(data_iter)
获取数据的下一个批次(batch)。
nn
是 torch
包中的一个子模块,提供了构建神经网络所需的各类功能。你可以将其视为一个神经网络相关操作的工具箱,包含了层(如卷积层、线性层、激活函数等)、损失函数、优化器等。
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...
Last update: 2024-12-21
🎉终于搭建完成🎉
-- 感谢您的支持 ---
👏欢迎阅读👏