d2l_notes_ch1-ch2

news2024/11/20 10:36:22

1. 引言

1)机器学习 > 表示学习 > 深度学习
表示学习是机器学习子集,其研究重点是如何⾃动找到合适的数据表示方式。深度学习是通过学习多层次的转换来进⾏的多层次的表示学习。
深度学习是机器学习的一个子集,但相比传统的机器学习方法,深度学习不仅取代了其浅层模型,⽽且取代了劳动密集型的特征⼯程。

2)数据、模型和算法
①与传统机器学习⽅法相⽐,深度学习的⼀个主要优势是可以处理不同⻓度的数据。②在没有⼤数据集的情况下,许多深度学习的效能并不⽐传统⽅法⾼。③数据的质量也很重要,如果数据中充满了错误,或者数据的特征不能预测任务⽬标,那么模型很可能⽆效。

3)实验环境
使用天池notebook(默认已安装pytorch),配置如下。

PS1="\[\e[33;1m\]\u\[\e[31;1m\]@\[\e[33;1m\]\h \[\e[36;1m\]\w\[\e[34;1m\]\n\$ \[\e[0m\]"
#pip install torch==1.12.0
#pip install torchvision==0.13.0
pip install d2l==0.17.6

mkdir d2l-zh && cd d2l-zh
curl https://zh-v2.d2l.ai/d2l-zh-2.0.0.zip -o d2l-zh.zip
unzip d2l-zh.zip && rm d2l-zh.zip
cd pytorch

2. 基础

2.1 张量

张量(tensor)表示一个由数值组成的数组,类似于numpy中的ndarray,但张量支持GPU加速运算和自动微分。

x = torch.arange(12)
#torch.zeros((2, 3, 4));torch.ones((2, 3, 4));torch.randn(3, 4)  #全0;全1;标准正态分布
x.shape
X = x.reshape(3, 4)

2.2 张量运算

①按元素(elementwise)运算,如算数运算(+, -, *, /, **, …),逻辑运算(>, <, ==, …)等。

# 在相同形状的两个张量上执⾏按元素操作
X = torch.arange(12, dtype=torch.float32).reshape((3,4))
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])
X + Y; torch.exp(X); X.sum()
X == Y
#torch.cat((X, Y), dim=0); X.T    #连接;转置

# 形状不同,通过⼴播机制执⾏按元素操作
a = torch.arange(3).reshape((3, 1))  #3 × 1
b = torch.arange(2).reshape((1, 2))  #1 × 2
a + b                                #广播为3 x 2,其中a复制列,b复制⾏,然后按元素相加

②线性代数运算,如向量点积矩阵乘法等。

x = torch.tensor(3.0); y = torch.tensor(2.0)    #实例化两个标量

x = torch.arange(4); y = torch.ones(4, dtype = torch.float32)    #向量(一维张量)
torch.dot(x,y)                  #点积 -> 加权平均;夹角余弦

A = torch.arange(20).reshape(5, 4)  #矩阵(二维张量)
A.sum(axis=[0, 1])              #对所有元素求和
A.sum(axis=1,keepdims=True)     #非降维求和
A.mean()                        #求均值
B = A.clone()
A * B                           #Hadamard product, A⊙B
B = torch.ones(4, 3)
torch.mv(A, x)                  #matrix-vector product
torch.mm(A, B)                  #matrix-matrix multiplication(矩阵乘法)

1)线代

定义数字表示法
标量仅包含⼀个数值被称为标量。小写字母,如x,y,z;
向量标量值组成的列表。标量值被称为向量的元素或分量。粗体、小写字母,如x,y,z;xi表示向量任一元素
矩阵向量组成的列表。粗体、⼤写字⺟,如X,Y,Z;xij表示第i行j列值
张量具有任意数量轴的n维数组特殊字体、大写字母,如X,Y,Z

⽬标,或许是深度学习算法最重要的组成部分(除了数据),通常被表达为范数(L1, L2, Lp; Frobenius)。向量范数是将向量映射到标量的函数f。给定任意向量x,向量范数要满足以下属性:①如果按常数因⼦α缩放向量的所有元素,其范数也会按相同常数因子的绝对值缩放;②三⻆不等式;③⾮负;④范数最⼩为0,当且仅当向量全由0组成。

2)微积分

在这里插入图片描述
如果f′(a)存在,则称f在a处是可微(differentiable)的。如果f在⼀个区间内的每个数上都是可微的,则此函数在此区间中是可微的。

在这里插入图片描述
其中符号d/dx和D是微分运算符,表⽰微分操作。

常见函数的微分求解:…
常见函数的组合函数的微分求解:常数相乘法则;加法法则;乘法法则;除法法则;
多元函数的微分求解:偏导数(partial derivative);链式法则
⾃动微分:深度学习框架⾃动计算导数。具体来说,系统会构建⼀个计算图,来跟踪计算是哪些数据通过哪些操作组合起来产⽣输出。⾃动微分使系统能够随后反向传播梯度。

# 例. 对函数y = 2x^{⊤}x关于列向量x求导
x = torch.arange(4.0)
x.requires_grad_(True)
y = 2 * torch.dot(x, x)
y.backward()       #调⽤反向传播函数来⾃动计算y关于x每个分量的梯度
x.grad == 4 * x    #快速验证这个梯度是否计算正确

# ⾮标量
x.grad.zero_()    #在默认情况下, PyTorch会累积梯度,需要清除之前的值
y = x * x
y.backward(torch.ones(len(x)))    #调⽤backward
x.grad

# 分离计算
x.grad.zero_()
y = x * x
u = y.detach()
z = u * x
z.sum().backward()
x.grad == u

3)概率

随机变量
概率
分布

2.3 数据预处理

import pandas as pd
import os
import torch
# 创建数据集
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')
data = pd.read_csv(data_file)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
# 处理缺失值
inputs = inputs.fillna(inputs.mean())    # 连续值,插值法填充
inputs = pd.get_dummies(inputs, dummy_na=True)    # 离散值,将NaN视为⼀个类别
# 转换为张量
X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps系列文章之Docker部署web ssh工具sshwifty

一、介绍 1.sshwifty简介 sshwifty是一款Web SSH & Telnet&#xff08;WebSSH & WebTelnet 客户端工具。 2.shwifty 特点 shwifty 是为 Web 设计的 SSH 和 Telnet 连接器。它可以部署在您的计算机或服务器上&#xff0c;为任何兼容&#xff08;标准&#xff09;的网络…

自定义Spring Boot Starter

Spring Boot starter 我们知道Spring Boot大大简化了项目初始搭建以及开发过程&#xff0c;而这些都是通过Spring Boot提供的starter来完成的。在实际项目中一些基础模块其本质就是starter&#xff0c;所以我们需要对Spring Boot的starter有一个全面深入的了解&#xff0c;这是…

Codesys单轴控制实现多段速控制功能

b一、序言 在设备加工行业&#xff0c;很多工艺要用到多段速控制&#xff0c;比如切割&#xff0c;打孔&#xff0c;攻丝等&#xff0c;刀具未碰到工件时可以快速行走&#xff0c;刀具碰到工件时需要慢速加工&#xff0c;而有些工艺在加工时随着刀具越走越深&#xff0c;其进刀…

掌握Python的X篇_4_开发工具ipython与vscode的安装使用,作业

本篇将会介绍两个工具的安装及使用来提高Python的编程效率。 ipython&#xff1a;比python更好用的交互式开发环境vscode&#xff1a;本身是文本编辑器&#xff0c;通过安装相关的插件vscode可以作为python集中开发环境使用 掌握Python的X篇_4_开发工具ipython与vscode的安装使…

GIT保存记录原理之commit对象

GIT 中提交对象非常的重要&#xff0c;我们通过它记录代码提交过程、进行文件保存、回退等操作&#xff0c;那么它是怎样帮助我们记录这些信息的呢&#xff1f;其实就是都保存在项目根目录的 .git 文件夹中。 新建空项目 gitDemo使用 git init初始化&#xff0c;在文件夹根目录…

57 KVM工具使用指南-制作 LibcarePlus 热补丁

文章目录 57 KVM工具使用指南-制作 LibcarePlus 热补丁57.1 概述57.2 手动制作57.3 通过脚本制作 57 KVM工具使用指南-制作 LibcarePlus 热补丁 57.1 概述 LibcarePlus 支持如下方式制作热补丁&#xff1a; 手动制作通过脚本制作 手动制作热补丁的过程繁琐&#xff0c;对于…

java——反射与注解

文章目录 Java反射基础1. 概念详解2. 示例代码 Java反射进阶1. 框架设计2. 动态代理3. 模板方法 Java注解基础1. 概念2. 基本语法3. 自定义注解4. 反射获取注解信息 Java注解进阶1. 应用场景2. 内置注解3. 第三方注解库4. 总结 Java反射与注解实战1. 实战场景2. 代码实现 Java反…

AutoSAR系列讲解(入门篇)2.3-Ports的类型

Ports的类型 一、接口的类型 二、S/R接口 三、C/S接口 一、接口的类型 Ports是SWC和SWC做接口&#xff08;Interface&#xff09;通信使用&#xff0c;或者SWC通过RTE和BSW做接口&#xff08;Interface&#xff09;通信使用。 Ports主要分为5种类型&#xff0c;列在下面的图…

【UEFI实战】UEFI图形显示(显示驱动)

显示驱动 OVMF BIOS使用了这个作为显卡驱动&#xff0c;具体图形显示的底层实现不是重点&#xff0c;所以这里只是简单介绍。 QemuVideoDxe是一个UEFI Driver Model&#xff0c;对应的EFI_DRIVER_BINDING_PROTOCOL&#xff1a; EFI_DRIVER_BINDING_PROTOCOL gQemuVideoDriv…

【数据库】事务、事务并发问题、并发事务隔离级别、及sql演示

文章目录 一、事务1.1 事务简介 及 sql 操作1.2 事务的特性 二、事务并发问题三、事务隔离级别四、sql 演示4.1 脏读4.2 不可重复读4.3 幻读 五、演示代码 一、事务 1.1 事务简介 及 sql 操作 事务&#xff1a;数据库执行的一系列操作&#xff0c;这些操作要么全部执行&#x…

【Java技术专题】「入门到精通系列教程」深入探索Java特性中并发编程体系的原理和实战开发指南(内存模型技术专题)

深入探索Java特性中并发编程体系的原理和实战开发指南&#xff08; 线程进阶技术专题&#xff09; 前言介绍JVM内存模型运行时数据区域堆内存栈内存 内存访问规则原子性对象类型基本类型 可见性有序性&#xff08;Happen Before法则&#xff09;系统内存&#xff08;MESI协议&a…

【OS】【期末选择题】【2023春】【仅供参考】

文章目录 题型一、选择第一章(10)第二章(19)第三章(23)第四章(32)第五章(15)第六章(15) 二、填空题三、简答题1.信号量2.调度算法3.页面置换4.虚拟地址到物理地址的映射 Reference 题型 题型题量分值选择10%填空25%10%10%解答题210’大题215’ 一、选择 第一章(10) 操作系统…

HuggingFace-RL-Unit2-Part1——Q-learning算法介绍

Q-learning算法介绍 文章目录 Q-learning算法介绍回顾: 什么是RL? 两种基于价值的方法状态价值函数动作价值函数 贝尔曼方程&#xff1a;简化价值计算蒙特卡罗 VS 时序差分学习蒙特卡洛&#xff1a;在一个回合结束后进行学习时序差分算法&#xff1a;在每一步进行学习 学习进展…

定时器的实现原理

文章目录 1.定时器的作用?2.数据结构要求3.时间轮4.分级时间轮5.业界实现方案参考文献 1.定时器的作用? 定时器的主要用途是执行定时任务。 定时任务在很多场景都需要用到&#xff0c;比如游戏的 Buff 实现&#xff0c;Redis 中的过期任务&#xff0c;Linux 中的定时任务&a…

java——多线程

文章目录 Java 的并发基础知识1. 创建线程2. 同步方法和同步代码块3. 线程安全的容器4. volatile 关键字5. Lock 和 Condition 接口 Java 多线程编程的基本框架1. 创建和启动线程2. 线程的状态转换3. 线程安全4. 死锁 Java 并发编程的高级技术1. 线程池2. 并发集合3. 原子类4. …

测试:进阶篇

在本篇章开始之前&#xff0c;先对之前的内容进行一个简单的总结回顾一下&#xff1a; 基于需求设计测试用例&#xff0c;这里有个测试用例的万能公式&#xff1a; 功能&#xff08;如果是软件&#xff0c;需要参考依据需求规格说明书&#xff1b;如果是物体&#xff0c;这个…

2023年7月电脑选择

文章目录 一、笔记本1.1 确定需求1.2 确定预算1.3 性能指标1.4 其他 二、台式电脑 最近有朋友让我推荐一下能做3D建模的笔记本电脑&#xff0c;本文就讲一下台式机和笔记本怎么选择。 一、笔记本 1.1 确定需求 当我们在选择笔记本时&#xff0c;首先需要确定自己的需求&#x…

CSS基础学习--24 表单

一、一个表单案例&#xff0c;我们使用 CSS 来渲染 HTML 的表单元素 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>CSS基础学习-表单</title> </head> <style> input[typetext], select {width:…

计算机基础--->数据结构(3)【堆(超详细)】

文章目录 堆堆的时间复杂度堆的分类堆的存储堆的操作插入元素删除堆顶元素 堆排序建堆排序 所有操作代码 堆 堆一般分为两种类型&#xff1a;最大堆和最小堆。在最大堆中&#xff0c;父节点的值总是大于或等于子节点的值&#xff0c;而在最小堆中&#xff0c;父节点的值总是小于…