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

news/2024/7/6 21:55:42/文章来源:https://www.cnblogs.com/Mmbhcyt/p/18267941

李沐动手学深度学习V2

文章内容说明

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


CSV文件修改读取成张量tensor

数据预处理

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

import osos.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 pddata = 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 torchX = 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 * 2while b.norm() < 1000:b = b * 2if b.sum() > 0:c = belse:c = 100 * breturn ca = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()a.grad == d / a

结果如下
image

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言打印倒三角形,底边长n作为参数输入,从键盘输入

打印倒三角形,底边长n作为参数输入,从键盘输入。#include <stdio.h> int main(int argc, char const *argv[]) {int i, j, k, l, n;printf("请输入底边长: \n");scanf("%d", &n);while (getchar() != \n);printf("输出图形如下:\n"…

WebAPI项目框架JWT权限验证

JWT是什么?校验逻辑?授权过程?这里就不过多的阐述了,直接上代码 在appsettings.json中配置jwt参数的值 SecretKey必须大于16个字符1 {2 "Logging": {3 "LogLevel": {4 "Default": "Information",5 "Micros…

2.SpringBoot快速上手

2.SpringBoot快速上手 SpringBoot介绍javaEE的开发经常会涉及到3个框架Spring ,SpringMVC,MyBatis.但是这三个框架配置极其繁琐,有大量的xml文件,spring Boot对之前的配置进行极大的简化Spring Boot 是由Pivotal团队提供的基于Spring的全新框架,简化Spring应用的初始搭建和…

RTMP协议

RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制。 与RTSP 不同,RTSP(Real-Time S…

yarn install 时显示 node_modules\esbuild: Command failed

可以找一找你的nodejs安装路径是不是中文的,如果是中文的换成英文应该就可以了(记得系统变量里也要改掉)

阿里云个人账号 创建docker仓库

1、创建阿里云账号 2、搜索“容器镜像服务”,进入,点击“管理控制台” 3、选择个人实例,这一步可能会让你创建registry密码(如果没有创建过的话),后面登录需要 4、创建命名空间5、创建镜像仓库 输入信息,点击下一步,选择本地仓库 6、进入管理页面 执行相关命令

Django3在网页上生成二维码

1.安装依赖包pip install django-qr-code2.在django,你项目的settings中,安装app 打开你项目的setting,找到INSTALLED_APPS ,在这里新加一条qr_code INSTALLED_APPS = [...,rest_framework,qr_code,... ] 3.在你打算渲染的html文档中,导入模板 {% load qr_code %}ps:如果…

Hackthebox bagel.dll 代码审计

利用ilspy将bagel.dll打开关于此目录有可以说的内容 目录解析 最上方的bagel是组装名字(assemble name) bagel_server 是命令空间(namespace) 下一级分支是类如File,Base,Handler,Orders等(class) 反序列化导致的命令执行漏洞代码审计思路 首先看主程序Bagel 1.通过明显的英…

2024/7/2 T1

题意:分析: 记 \(S_{i}\) 表示目前第 \(i\) 个集合里的元素个数。 集合之间互不区分,强制钦定必须满足 \(S_{i} \le S_{i+1}(i<k)\)。 经搜索发现,这样的状态数量最多约为 \(1.8 \times 10^5\)。 极差可以这样处理:将 \(a\) 排序,\(S_{i}\) 第一次加入某个元素 \(x\),…

Eplan插件 - 矩形修订云线

前言 在 CAD 中,矩形云线一直是设计师们用于标注修订区域或突出重要部分的得力工具。然而,在 Eplan 中,没有直接绘制矩形云线的功能。为了填补这一空白,开发了专门用于Eplan的矩形修订云线插件。 这款插件保留了Eplan绘制的习惯,可以简洁快速的框选出需要修订或者重点关注…

Nginx配置以及热升级

目录Nginx详解1. Nginx关键特性2. Nginx配置2.1 event2.2 http2.2.1 log_format2.2.2 sendfile2.2.3 tcp_nopush2.2.4 tcp_nodelay2.2.5 keepalive_timeout2.2.6 include2.2.7 default_type2.2.8 server3. 配置Nginx虚拟主机3.1 基于端口3.2 基于IP3.3 基于域名4. Location4.1 …

Python3学习之路~3.4 作业之对员工信息表实现增删改查操作

有以下员工信息表当然此表你在文件存储时可以这样表示1,Alex Li,22,13651054608,IT,2013-04-01 现需要对这个员工信息文件,实现增删改查操作可进行模糊查询,语法至少支持下面3种: select name,age from staff_table where age > 22 select * from staff_table where dep…

Python3学习之路~2.11 补充:Python输出字符串加颜色or背景色

格式:\033[二位数;1m字符串\033[0m 二位数为31-37,40-47(其他数字无效),其中:十位数3表示字颜色,4表示背景色个位数0-7分别表示 黑 红 绿 黄 蓝 紫 浅蓝 灰 示例代码:# 加颜色:31-37 print("\033[31;1mHello Python-31-红色字\033[0m") print("\033[32;…

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备,适用于在恶劣环境下进行数据采集、运营管理和现场操作。随着新能源技术的快速发展,工业平板电脑不断地得到应用,并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑在新能源领域中的应用。一、智能…

免费可视化工具在智慧物流中是如何被应用的?

在现代智慧物流中,免费可视化工具正扮演着越来越重要的角色。这些工具通过数据的可视化展示,使物流管理更加高效、透明和智能化。免费可视化工具可以将复杂的物流数据转换为直观的图表和图形,帮助管理者实时监控和分析物流运作情况,从而优化资源配置和提升物流效率。免费可…

一秒即懂财务报表勾稽关系

财务报表的勾稽关系!审计!审计试算平衡!算平衡表!项目经理!财务总监!会计!出纳6财务报表勾稽关系属于会计做账是否正确的要且快速的方法! 6财务人员对外提供报表是非常正常且频繁的情,股东要求,税局纳税申报,发行股票,发券,公司年度总结等等场合。 6而实际现状是,…

Redis Sentinal(哨兵模式详解)

参考文章 https://www.cnblogs.com/wzh2010/p/18030907 1、什么是哨兵模式 在实际生产环境中,服务器难免会遇到一些突发状况:服务器宕机,停电,硬件损坏等等,一旦发生,后果不堪设想。哨兵模式的核心还是主从模式的演变,只不过相对于主从模式,在主节点宕机导致不可写的情…

Profibus DP主站转Modbus网关连接智能化电表通讯

Profibus DP主站转Modbus网关(XD-MDPBM20),是实现不同工业通信协议之间互联互通的设备,主要将Profibus DP协议转换为Modbus协议,实现数据的双向传输。通过Profibus DP主站转Modbus网关(XD-MDPBM20),可以有效实现现场设备和控制系统之间的无缝连接,提高生产效率。Profi…

[XDCTF 2015]filemanager

[XDCTF 2015]filemanager ​/www.tar.gz​拿到源码 我直接在github上看了https://github.com/CTFTraining/xdctf_2015_filemanager common.inc.php将传入的所有参数使用addslashes转义函数 ​​ 然后分析upload.php 使用basename​函数确保文件名中没有目录路径,防止路径遍历攻…

解码未来城市:探秘数字孪生的奥秘

在科技日新月异的今天,"数字孪生"(Digital Twin)这一概念如同一颗璀璨的新星,照亮了智慧城市、智能制造等多个领域的前行之路。本文将深入浅出地解析数字孪生的定义、技术原理、应用场景及未来发展,带您一窥这股引领时代潮流的力量。数字孪生的定义数字孪生,简…