首页 > 其他分享 >李沐动手学深度学习V2-chap_preliminaries

李沐动手学深度学习V2-chap_preliminaries

时间:2024-07-02 21:08:33浏览次数:1  
标签:inputs grad torch V2 如下 chap 李沐 范数 data

李沐动手学深度学习V2

文章内容说明

本文主要是自己学习过程中的随手笔记,需要自取
课程参考B站https://space.bilibili.com/1567748478?spm_id_from=333.788.0.0
课件等信息原视频简介中有


CSV文件修改读取成张量tensor

数据预处理

首先(创建一个人工数据集,并存储在CSV(逗号分隔值)文件) ../data/house_tiny.csv中,在csv文件中写入数据

import os

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')  # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

要进行读取数据集,我们导入pandas包并调用read_csv函数。该数据集有四行三列。其中每行描述了房间数量(“NumRooms”)、巷子类型(“Alley”)和房屋价格(“Price”)。

# 如果没有安装pandas,只需取消对以下行的注释来安装pandas
# !pip install pandas
import pandas as pd

data = pd.read_csv(data_file)
print(data)

结果如下
image

处理缺失值

为了处理缺失的数据,典型的方法包括插值法和删除法,下面以插值法作为示例
通过位置索引iloc,我们将data分成inputsoutputs, 其中前者为data的前两列,而后者为data的最后一列。 对于inputs中缺少的数值,我们用同一列的均值替换“NaN”项。【第二列求不出均值所以不改变】

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

结果如下
image
对于inputs中的类别值或离散值,我们将“NaN”视为一个类别,使用独热编码,NAN值赋0,其他赋1

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)

结果如下
image

转为张量格式

现在inputs和outputs中的所有条目都是数值类型,它们可以转换为张量格式。

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))
X, y

结果如下
image
python默认类型float64,这样比较慢,机器学习一般改float32

范数

向量的范数是表示一个向量有多大。 这里考虑的大小(size)概念不涉及维度,而是分量的大小。
image

L1范数

L1范数,它表示为向量元素的绝对值之和
image

    # 向量(1维张量)
    vector = torch.tensor([1.0, 2.0, 3.0, 4.0, -5.0])
    # 求向量的L1范数
    norm1 = torch.norm(vector, p=1, dim=0)

结果如下
image

L2范数

L2范数是向量元素平方和的平方根
image
可以用以下代码实现

u = torch.tensor([3.0, -4.0]) #或u = torch.tensor([3.0, -4.0],p=2)
torch.norm(u)

结果如下
image

Frobenius范数

Frobenius范数(Frobenius norm)是矩阵元素平方和的平方根
image

#Frobenius范数是矩阵,Lp范数是向量
torch.norm(torch.ones((4, 9)))

结果如下
image

自动求导实现

image
在我们计算y关于x的梯度之前,需要一个地方来存储梯度。使用如下代码

x.requires_grad_(True)  # 等价于x=torch.arange(4.0,requires_grad=True)
x.grad  # 默认值是None

现在计算y

y = 2 * torch.dot(x, x)
y

结果如下
image
通过调用反向传播函数来自动计算y关于x每个分量的梯度

y.backward()
x.grad

结果如下,存储x每个分量的梯度(即切线/导数)
image
验证一下是否正确
image

矩阵的反向传播

image

分离计算

将某些计算移动到记录的计算图之外,使用y.detach()将u赋为标量,及x*x

x.grad.zero_()
y = x * x
u = y.detach()
z = u * x
z.sum().backward()
x.grad == u

结果如下
image
由于记录了y的计算结果,我们可以随后在y上调用反向传播, 得到y=xx关于的x的导数,即2x

x.grad.zero_()
y.sum().backward()
x.grad == 2 * x

结果如下
image

Python控制流的梯度计算

即使构建函数的计算图需要通过Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度
while循环的迭代次数和if语句的结果都取决于输入a的值

def f(a):
    b = a * 2
    while b.norm() < 1000:
        b = b * 2
    if b.sum() > 0:
        c = b
    else:
        c = 100 * b
    return c

a = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()

a.grad == d / a

结果如下
image

标签:inputs,grad,torch,V2,如下,chap,李沐,范数,data
From: https://www.cnblogs.com/Mmbhcyt/p/18267941

相关文章

  • ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
    ONNXRuntime简介ONNXRuntime是一个跨平台的推理和训练机器学习加速器。ONNX运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如PyTorch和TensorFlow/Keras)以及经典机器学习库(如scikit-learn、LightGBM、XGBoost等)的模型。ONNX运行时与不同的硬件、......
  • Codeforces Round 941 (Div. 2) cf 941 div2 A~D
    每题都有AC代码在伸缩代码框请留意!!A.CardExchange-------------------------------------------题解----------------------------------选择任意K张相同的牌替换成k-1张任意的牌,也就是说只要有一组牌相同的数量大于k就可以获得最大k-1相同的其他牌,按照这个策略便可以替换掉......
  • 界面组件DevExpress WPF v24.1 - 增强的可访问性 & UI自动化
    DevExpressWPF拥有120+个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpressWPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。DevExpressWPF控件日前正式发布了今年一个重大版......
  • 开源语音转文本Speech-to-Text大模型实战之Wav2Vec篇
    前言近年来,语音转文本(Speech-to-Text,STT)技术取得了长足的进步,广泛应用于各种领域,如语音助手、自动字幕生成、智能客服等。本文将详细介绍如何利用开源语音转文本大模型进行实战,从模型选择、环境搭建、模型训练到实际应用,带您一步步实现语音转文本功能。一、模型选择目前,市......
  • 【重写SpringFramework】第一章beans模块:本章小结(chapter 1-13)
    1.前言在Spring框架中,beans模块是仅次于core模块的基础模块。我们知道,IOC机制是Spring框架的两大基石之一,beans模块的主要任务就是实现控制反转和依赖注入的功能。从具体实现来说,BeanFactory接口是整个模块的核心接口,几乎所有功能都是围绕对象展开的。BeanFacto......
  • [本科项目实训] P-Tuning v2 训练数据生成
    思路由于我们项目的任务并不属于通用的自然语言处理任务,所以显然没有公开数据集,因而手工生成与模型生成相结合的方式或许是一个不错的选择。在不同的使用方式和任务情景下,我们曾经尝试了不同的数据集生成方式:#v1importjsonimportrandomtrain_f=True#train_f=False......
  • [本科项目实训] P-Tuning v2 测试记录
    测试脚本PRE_SEQ_LEN=64CHECKPOINT=dsbtpg-chatglm-6b-pt-64-2e-2STEP=500CUDA_VISIBLE_DEVICES=0python3main.py\--do_predict\--validation_filedevVX.json\--test_filedevVX.json\--overwrite_cache\--prompt_columncontent\......
  • [本科项目实训] P-Tuning v2 训练记录
    训练脚本PRE_SEQ_LEN=64LR=2e-2CUDA_VISIBLE_DEVICES=0python3main.py\--do_train\--train_filetrainVX.json\--validation_filedevVX.json\--prompt_columncontent\--response_columnsummary\--overwrite_cache\--mo......
  • 【openGauss、PostgreSQL】openGauss、PostgreSQL数据库通用查表字段信息脚本-v202406
    【openGauss、PostgreSQL】openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216openGauss、PostgreSQL数据库通用查表字段信息脚本-v20240620-2216此脚本,openGauss、PostgreSQL都可执......
  • 电影《绝地战警:生死与共》迅雷BT选择[高清版百度云下载/MKV2.88GB][中英双字资源]
    《绝地战警:生死与共》:一场华丽的动作盛宴电影《绝地战警:生死与共》是一部由导演马丁·坎贝尔执导、克里斯·塔克和杰克·切尼主演的动作喜剧片。该片于2021年上映,以其惊险刺激的动作场面和幽默风格赢得了广大观众的喜爱。 故事发生在现代繁华的洛杉矶市,克里斯·塔克......