《动手学深度学习》第2章 预备知识 部分笔记

文章目录

  • 一、数据操作
  • 二、数据预处理
    • 1.函数
      • (1)递归创建目录:os.makedirs()
      • (2)读取CSV文件:pandas.read_csv()
      • (3)合并路径:os.path.join()
      • (4)按索引访问:iloc()
      • (5)填充缺失值:fillna()
      • (6)转化离散信息:get_dummies()
      • (7)转换为张量格式:torch.tensor()
    • 2.练习
  • 三、线性代数
  • 四、微积分
  • 五、自动微分
    • 1.函数
      • (1)x.requires_grad_(True)
      • (2)x.grad.zero_()
      • (3).detach()
      • (4).backward()
    • 2.练习
  • 六、概率
    • 1.函数
      • (1)Multinomial()
      • (2)cumsum()
      • (3)ply.plot()
    • 2.练习

一、数据操作

二、数据预处理

1.函数

(1)递归创建目录:os.makedirs()

如果路径中的父级目录不存在,os.makedirs() 将递归创建这些目录。参数 exist_ok=True 表示如果目录已经存在,不会抛出异常。

(2)读取CSV文件:pandas.read_csv()

(3)合并路径:os.path.join()

path1 = '/path/to/directory'
path2 = 'file.txt'
full_path = os.path.join(path1, path2)

(4)按索引访问:iloc()

# 使用 iloc 选择第一行
row_0 = df.iloc[0]
# 使用 iloc 选择特定的行范围
rows_1_2 = df.iloc[1:3]
# 使用 iloc 选择特定的行和列范围
subset = df.iloc[0:2, 1:3]

(5)填充缺失值:fillna()

# 使用 fillna 填充缺失值为指定的值0
df_filled = df.fillna(0)

(6)转化离散信息:get_dummies()

可参考这篇博客
pd.get_dummies相当于onehot编码,常用与把离散的类别信息转化为onehot编码形式。
(感觉和数学建模中的虚拟变量有点像)

(7)转换为张量格式:torch.tensor()

2.练习

(1)删除缺失值最多的列。
(2)将预处理后的数据集转换为张量格式

import os
import pandas as pd
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')

# 以csv格式读取文件
data = pd.read_csv(data_file)
print(data)

# 删除缺失值最多的列
max_col_name=data.isna().sum().idxmax()
data = data.drop(max_col_name,axis=1)
print(data)

# 将预处理后的数据集转换为张量格式
data_tensor = torch.tensor(data.values)
print(data_tensor)

在这里插入图片描述

三、线性代数

以后有时间再写吧
在这里插入图片描述

四、微积分

在这里插入图片描述

五、自动微分

1.函数

(1)x.requires_grad_(True)

通过调用 requires_grad_(True) 方法,可以将张量 x 标记为需要计算梯度。
当一个张量被标记为需要计算梯度时,PyTorch 会在对其进行操作时自动构建计算图,并在反向传播过程中计算相对于这个张量的梯度。这对于训练神经网络和执行自动微分非常有用,因为可以轻松地获取每个张量相对于损失函数的梯度,从而更新模型参数。

(2)x.grad.zero_()

清除之前的梯度(梯度会累积)

(3).detach()

u = y.detach() 的作用是将张量 y 从计算图中分离出来,并将其赋值给变量 u。通过这样的操作,变量 u 包含了与 y 相同的数值数据,但不再保留与计算图相关的梯度信息。

(4).backward()

看到了一篇知乎里写得很好的文章:
Pytorch autograd,backward详解

2.练习

(1)为什么计算二阶导数比一阶导数的开销要更大?

额外的计算量:计算二阶导数需要对一阶导数进行进一步的求导,这意味着需要进行更多的数学运算。在计算图中,每个节点都需要考虑其二阶导数,因此会涉及到更复杂的运算过程。

高阶链式法则:计算二阶导数需要应用高阶链式法则,这会增加计算的复杂性。高阶链式法则涉及更多的乘法、加法和函数调用,从而增加了计算的开销。

内存消耗:在计算二阶导数时,需要存储更多的中间结果和计算图信息,以便进行二阶梯度的计算。这可能导致更多的内存消耗,尤其是对于较大的张量和计算图。

数值稳定性:在计算二阶导数时,由于涉及更多的数值计算和微小的数值变化,可能会增加数值稳定性方面的挑战,导致数值误差的累积。

(2)在运行反向传播函数之后,立即再次运行它,看看会发生什么。

会报错:
RuntimeError: Trying to backward through the graph a second time (or directly access saved tensors after they have already been freed). Saved intermediate values of the graph are freed when you call .backward() or autograd.grad(). Specify retain_graph=True if you need to backward through the graph a second time or if you need to access saved tensors after calling backward.

解决方法:
加上“retain_graph=True”
d.backward(retain_graph=True)

(3)在控制流的例子中,我们计算d关于a的导数,如果将变量a更改为随机向量或矩阵,会发生什么?

会报错

解决方法:
用sum()
下面这篇文章里有解释
Pytorch autograd,backward详解

在这里插入图片描述

(4)重新设计一个求控制流梯度的例子,运行并分析结果。

在这里插入图片描述
当a=1,即b=a*3<30时,b会再次乘以20,所以最后的梯度为60

在这里插入图片描述
而当a=11,即b=a*3>30时,b不会乘以20,所以最后的梯度为3

(5) 题目如下图:
在这里插入图片描述

%matplotlib inline
from d2l import torch as d2l

x = torch.linspace(0, 10, 1000)
x.requires_grad_(True)
y = torch.sin(x)
y.backward(torch.ones_like(x))
y = y.detach()

d2l.plot(x.detach(), [y, x.grad], 'f(x)', "f'(x)", legend=['f(x)', 'Tangent line'])
d2l.plt.show()

在这里插入图片描述

六、概率

1.函数

(1)Multinomial()

个人理解:
Multinomial(抽样几次,权重)

import torch
from torch.distributions import Multinomial
# 定义试验次数和每个结果的概率
probs = torch.tensor([0.2, 0.3, 0.5])
total_count = 4
# 创建多项式分布对象
m = Multinomial(total_count=total_count, probs=probs)
# 进行抽样
samples = m.sample()
print(samples)

抽样是随机的。每一与运行的结果可能不一样:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)cumsum()

作用: 计算数组元素的累积和

import torch
# 创建一个张量
x = torch.tensor([1, 2, 3, 4, 5])
# 对张量进行累积求和操作
cumulative_sum = torch.cumsum(x, dim=0)
print("原始张量:", x)
print("累积求和结果:", cumulative_sum)

运行结果:

在这里插入图片描述
对于矩阵来说,可以在两个方向上求和。

在0轴方向上求和:

在这里插入图片描述
在1轴方向上求和:

在这里插入图片描述

(3)ply.plot()

plt.plot() 函数详解

2.练习

(1)
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stl--set和map使用技巧

文章目录 set使用场景&#xff1a;简单使用 map使用场景&#xff1a;简单实用 set 使用场景&#xff1a; 底层实现为红黑树&#xff0c;默认排序&#xff0c;适合搜索数组中的某一个元素使用。 简单使用 set<int> s1 {1,3,4,5};s1.insert(2);s1.erase(3);for(auto &…

用户视角的比特币和以太坊外围技术整理

1. 引言 要点&#xff1a; 比特币L2基本强调交易内容的隐蔽性&#xff0c;P2P交易&#xff08;尤其是支付&#xff09;成为主流&#xff0c;给用户带来一定负担&#xff08;闪电网络&#xff09;在以太坊 L2 中&#xff0c;一定程度上减少了交易的隐蔽性&#xff0c;主流是实…

手撕快速排序

定义 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法. 其基本思想为:任取待排序的某个元素作为基准值,按照该排序码将待排序集合分割成两个子序列, 左子序列中所有元素均小于基准值,右子序列均大于基准值,然后左右子序列重复该过程,知道所有元素都有序为止. (核心…

unity3d Animal Controller的Animal组件中General基础部分理解

控制器介绍 动物脚本负责控制动物的所有运动逻辑.它管理所有的动画师和刚体参数,以及所有的状态和模式,动物可以做。 动物控制器 是一个动画框架控制器,根动或到位,为任何生物或人形。它利用刚体与物理世界的互动和动画师的玩动画。 States States 是不互相重叠的动画。例如…

C++ 矩形类

思维导图&#xff1a; #include <iostream> using namespace std; class Rect { private:int width;int height; public:void init(int w,int h){widthw;heighth;}void set_w(int w){widthw;}void set_h(int h){heighth;}void show(){cout << "perimeter &qu…

vue3/vue2若依框架对比,点击新增编辑跳转到新页面(新增编辑共用代码)

vue2若依框架&#xff1a; router里面定义好&#xff0c;编辑里面添加一个id {path: /filmManagement,component: Layout,hidden: true,redirect: noredirect,children: [{path: editFilmDetail,component: () > import(/views/filmManagement/editFilmDetail),name: editFi…

城市级智能网联示范区全扫描(2024版)

本篇推出城市级智能网联示范区全扫描&#xff08;提供“城市级智能网联测试示范区汇总表”、“部委推进的城市级智能网联测试示范区汇总表”&#xff09;。 文 | 吴冬升 全文约5000字&#xff0c;预计阅读14分钟 表1 城市级智能网联测试示范区汇总表 区域省份城市名称华东上海…

《JAVA与模式》之单例模式

系列文章目录 文章目录 系列文章目录前言一、单例模式的结构二、Lazy initialization holder class模式前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在阎宏博士…

《JAVA与模式》之建造模式

系列文章目录 文章目录 系列文章目录前言一、产品的内部表象二、使用场景三、使用建造模式构建复杂对象前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 在阎宏博士…

下一站,华东理工大学!

Datawhale线下 承办单位&#xff1a;华东理工大学创新创业协会 华东理工大学&#xff08;East China University of Science and Technology&#xff09;&#xff0c;简称华理&#xff08;ECUST&#xff09;&#xff0c;坐落于上海市&#xff0c;是中华人民共和国教育部直属的…

机器人大赛有什么用?

机器人大赛在多个方面都具有显著的价值。首先&#xff0c;机器人大赛可以为学生提供一个实践与创新的机会&#xff0c;有助于培养学生的动手实践能力和创新思维。在比赛过程中&#xff0c;学生需要运用所学的知识和技能&#xff0c;设计、制作和调试机器人&#xff0c;这不仅可…

【前端寻宝之路】学习和总结文本和图片位置和类型设置

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-YaQjeEzlBXrYuFKV {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

【EDK II】作为UEFI的实现,EDK II 的架构是什么样的

目录 前言 EDK II 架构 配置文件 结语 前言 基本输入输出系统 (Basic Input Output System, BIOS) 最早由 IBM&#xff08;International Business Machines Corporation) 公司于1981年提出并开发&#xff0c;后来成为个人计算机(PC)的标准固件接口。但受限于传统BIOS (Le…

力扣串题:字符串中的第一个唯一字母

映射做法&#xff1a;将字母转为数字之类的转化必须在运算中实现如-a int firstUniqChar(char * s){int a[26] {0};int len strlen(s);int i;for (i 0; i < len; i)a[s[i] - a];for (i 0; i < len; i) {if (a[s[i] - a] 1)return i;}return -1; }

聚观早报 | 比亚迪e2荣耀版上市;华为享界S9正式亮相

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 3月14日消息 比亚迪e2荣耀版上市 华为享界S9正式亮相 理想汽车L系列改名 极氪全新纯电MPV车型曝光 vivo X100S外…

一键导入Figma,让团队文件管理更加便捷安全!

如何将Figma引入国内软件已成为人们关注的话题。本文将分享两种Figma导入方法&#xff0c;使您的设计文件更加安全。 两种方法&#xff0c;一键导入Figma文件 即时设计是一种基于云的设计工具&#xff0c;在功能和特性上与Figma非常相似。如果你熟悉Figma的界面&#xff0c;即…

Day31:安全开发-JS应用WebPack打包器第三方库JQuery安装使用安全检测

目录 打包器-WebPack-使用&安全 第三方库-JQuery-使用&安全 思维导图 JS知识点&#xff1a; 功能&#xff1a;登录验证&#xff0c;文件操作&#xff0c;SQL操作&#xff0c;云应用接入&#xff0c;框架开发&#xff0c;打包器使用等 技术&#xff1a;原生开发&…

RAG一文读懂!概念、场景、优势、对比微调与项目代码示例

本文结合“基于 ERNIE SDKLangChain 搭建个人知识库”的代码示例&#xff0c;为您讲解 RAG 的相关概念。 01 概念 在2020年 Facebook AI Research(FAIR)团队发表一篇名为《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》的论文。这篇论文首次提出了 RA…

Midjourney绘图欣赏系列(九)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子&#xff0c;它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同&#xff0c;Midjourney 是自筹资金且闭源的&#xff0c;因此确切了解其幕后内容尚不…

行业认可 | 海云安上榜《2024年网络与信息安全行业全景图》多个领域

近日&#xff0c;深圳市网络与信息安全行业协会正式发布《2024年网络与信息安全行业全景图》。海云安凭借过硬的技术实力及成熟的网络与信息安全产品及服务获得行业认可&#xff0c;入围6大类目共计17项细分领域。包括&#xff1a; 业务安全&#xff08;软硬件开发安全、人工智…
最新文章