动手学深度学习(Pytorch版)代码实践-深度学习基础-01基础函数的使用

01基础函数的使用

主要内容

  1. 张量操作:创建和操作张量,包括重塑、填充、逐元素操作等。
  2. 数据处理:使用pandas加载和处理数据,包括处理缺失值和进行one-hot编码。
  3. 线性代数:包括矩阵运算、求和、均值、点积和各种范数计算。
  4. 自动求导:使用PyTorch的自动求导功能计算梯度,并演示梯度清除和分离计算图的操作。
import torch
import pandas as pd
import os# 创建和操作张量
# 张量表示一个数值组成的数组,这个数组可能有多个维度
x = torch.arange(12)  # 创建一个包含从0到11的向量
print("x:", x)  # 打印张量xprint("x的形状:", x.shape)  # 打印张量的形状print("x中的元素总数:", x.numel())  # 打印张量中元素的总数# 改变一个张量的形状而不改变元素数量和元素值,采用reshape
X = x.reshape(3, 4)  # 将x重塑为一个3行4列的矩阵
print("重塑后的X:", X)  # 打印重塑后的X# 创建全0,全1张量
print("全零张量:", torch.zeros((2, 3, 4)))  # 创建一个形状为(2,3,4)的全0张量
print("全一张量:", torch.ones((2, 3, 4)))  # 创建一个形状为(2,3,4)的全1张量# 使用包含数值的Python列表创建张量
t = torch.tensor([[2, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])  # 创建张量t
print("从列表创建的张量:", t)  # 打印张量t
print("张量t的形状:", t.shape)  # 打印张量t的形状# 张量操作
X = torch.arange(12, dtype=torch.float32).reshape((3, 4))  # 创建并重塑张量X
Y = torch.tensor([[2.0, 1, 4, 3], [1, 2, 3, 4], [4, 3, 2, 1]])  # 创建张量YZ = torch.zeros_like(X)  # 创建一个形状和X相同的全零张量
Z[:] = X + Y  # 计算X和Y的逐元素加法
print("Z (X + Y):", Z)  # 打印Z
print("Z的转置:", Z.T)  # 打印Z的转置# 使用pandas创建和处理数据集
# 创建一个人工数据集,并存储在CSV(逗号分隔值)文件中
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)  # 读取CSV文件
print("从CSV加载的数据:", data)  # 打印加载的数据inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]  # 分离输入和输出
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())  # 用均值填充缺失值
print("处理后的输入数据:", inputs)  # 打印处理后的输入数据inputs = pd.get_dummies(inputs, dummy_na=True).astype('float')  # 转换类别变量并将其转换为浮点型
print("独热编码后的输入数据:", inputs)  # 打印独热编码后的输入数据X = torch.tensor(inputs.values)  # 将输入数据转换为张量
Y = torch.tensor(outputs.values)  # 将输出数据转换为张量
print("输入数据的张量X:", X)  # 打印输入数据的张量X
print("输出数据的张量Y:", Y)  # 打印输出数据的张量Y# 线性代数操作
A = torch.arange(20, dtype=torch.float32).reshape(5, 4)  # 创建并重塑张量A
B = A.clone()  # 通过分配新内存,将A的副本分配给B
print("矩阵A:", A)  # 打印矩阵A
print("矩阵A + B:", A + B)  # 矩阵加法
print("矩阵A * B:", A * B)  # 矩阵逐元素乘法a = 2
X = torch.arange(24).reshape(2, 3, 4)  # 创建并重塑张量X
print("张量X:", X)  # 打印张量X
print("a + X:", a + X)  # 标量和张量相加
print("a * X的形状:", (a * X).shape)  # 打印标量和张量相乘后的形状# 求和与均值
A_sum_axis0 = A.sum(axis=0)  # 沿着第0维度求和
print("沿第0维度求和:", A_sum_axis0, "形状:", A_sum_axis0.shape)  # 打印求和结果及其形状print("A中的元素总数:", A.numel())  # 打印A中的元素总数
print("A的均值:", A.mean())  # 打印A的均值
print("A的和除以元素总数:", A.sum() / A.numel())  # 打印A的和除以元素总数sum_A = A.sum(axis=1, keepdims=True)  # 沿第1维度求和,并保持维度
print("沿第1维度求均值,保持维度:", A.mean(axis=1, keepdim=True))  # 打印沿第1维度的均值,并保持维度
print("沿第1维度求和,保持维度:", sum_A)  # 打印沿第1维度的求和,并保持维度print("A的归一化 (A / sum_A):", A / sum_A)  # 打印归一化的Aprint("沿第0维度的累积和:", A.cumsum(axis=0))  # 打印沿第0维度的累积和# 点积
x = torch.arange(4, dtype=torch.float32)  # 创建张量x
y = torch.ones(4, dtype=torch.float32)  # 创建全1张量y
print("x和y的点积:", torch.dot(x, y))  # 打印x和y的点积
print("逐元素乘积的和:", torch.sum(x * y))  # 打印逐元素乘积的和print("矩阵A和向量x的乘积:", torch.mv(A, x))  # 打印矩阵和向量的乘积# 矩阵乘法
B = torch.ones(4, 3)  # 创建全1矩阵B
print("矩阵A:", A)  # 打印矩阵A
print("矩阵B:", B)  # 打印矩阵B
print("矩阵A和B的矩阵乘法:", torch.mm(A, B))  # 打印矩阵A和B的矩阵乘法# 各种范数
u = torch.tensor([3.0, -4.0])  # 创建张量u
print("u的L2范数:", torch.norm(u))  # 打印u的L2范数
print("u的L1范数:", torch.abs(u).sum())  # 打印u的L1范数
print("一个全1矩阵(4x9)的弗罗贝尼乌斯范数:", torch.norm(torch.ones((4, 9))))  # 打印全1矩阵的弗罗贝尼乌斯范数print("张量元素的和:", sum(torch.arange(20, dtype=torch.float32)))  # 打印张量元素的和A = torch.arange(40, dtype=torch.float32).reshape(2, 5, 4)  # 创建并重塑张量A
print("3D张量A:", A)  # 打印3D张量A
print("沿轴[1,2]求和:", A.sum(axis=[1, 2]))  # 打印沿轴[1,2]求和结果
print("沿轴[1,2]求和,保持维度:", A.sum(axis=[1, 2], keepdims=True))  # 打印沿轴[1,2]求和结果,并保持维度A = torch.ones(2, 5, 4)  # 创建全1张量A
print("3D张量A,全为1:", A)  # 打印全1张量A
print("沿轴[0,1]求和,保持维度:", A.sum(axis=[0, 1], keepdim=True))  # 打印沿轴[0,1]求和结果,并保持维度# 自动求导
x = torch.arange(4.0)  # 创建张量x
print("张量x:", x)  # 打印张量xx.requires_grad_(True)  # 开启自动求导
print("x的梯度 (初始为None):", x.grad)  # 打印x的梯度 (初始为None)y = 2 * torch.dot(x, x)  # 2 * (x · x) 求导为 4x
print("y = 2 * (x · x):", y)  # 打印yy.backward()  # 计算导数
print("backward之后x的梯度:", x.grad)  # 打印x的梯度
print("x的梯度是否等于4 * x:", x.grad == 4 * x)  # 打印x的梯度是否等于4 * x# 清除梯度
x.grad.zero_()  # 清除x的梯度
y = x.sum()
y.backward()
print("求和y并backward之后的x梯度:", x.grad)  # 打印求和y并backward之后的x梯度# 对非标量调用backward需要传入一个gradient参数
x.grad.zero_()  # 清除x的梯度
y = x * x
y.sum().backward()  # 等价于 y.backward(torch.ones(len(x)))
print("平方并求和y之后的x梯度:", x.grad)  # 打印平方并求和y之后的x梯度# 分离计算图
x.grad.zero_()  # 清除x的梯度
y = x * x
u = y.detach()  # 从计算图中分离y
print("张量y:", y)  # 打印张量y
print("从y分离的张量u:", u)  # 打印从y分离的张量uz = u * x
z.sum().backward()
print("分离u乘以x的梯度:", x.grad == u)  # 打印分离u乘以x的梯度x.grad.zero_()  # 清除x的梯度
y.sum().backward()
print("再次求和y之后的x梯度:", x.grad == 2 * x)  # 打印再次求和y之后的x梯度

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

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

相关文章

STM32FLASH闪存

文章目录 前言首先来回顾一下存储器映像FLASH简介闪存模块组织Flash基本结构(关系)图Flash解锁使用指针访问存储器FLASH操作Flash全擦除Flash页擦除Flash写入 选项字节选项字节操作选项字节擦除选项字节写入 器件电子签名注意闪存控制寄存器一览 前言 本…

[leetcode hot 150]第一百九十一题,位1的个数

题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中设置位的个数(也被称为汉明重量)。 这道题比较简单,直接对最后一位进行与1的与操作,然…

Shell 编程之正则表达式与文本处理器

一、正则表达式 1.1 正则表达式概述 1. 正则表达式的定义 正则表达式又称正规表达式、常规表达式。在代码中常简写为 regex 、 regexp 或 RE 。 正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串…

RTPS协议之Messages Module

目录 Messages ModuleType定义RTPS消息结构RTPS消息头子消息结构 RTPS消息接收者SubmessageElementsRTPS HeaderRTPS Submessages Messages Module RTPS Writer和RTPS Reader之间的交换数据的消息。 Type定义 TypePurposeProtocolId_tSubmessageFlagsub msg flagSubmessageK…

第16章-超声波跟随功能 基于STM32的三路超声波自动跟随小车 毕业设计 课程设计

第16章-超声波跟随功能 无PID跟随功能 //超声波跟随if(HC_SR04_Read() > 25){motorForward();//前进HAL_Delay(100);}if(HC_SR04_Read() < 20){motorBackward();//后退HAL_Delay(100);}PID跟随功能 在pid.c中定义一组PID参数 tPid pidFollow; //定距离跟随PIDpidFol…

越来越多的连锁企业选择开源连锁收银系统

连锁企业的收银系统作为其信息化的基础&#xff0c;随着运营的复杂化&#xff0c;越来越多的连锁企业选择开源连锁收银系统来满足其日常经营需要。商淘云为大家分享连锁企业选择开源连锁收银系统的三大原因&#xff0c;大家点赞收藏。 首先是灵活性和定制性强&#xff0c;连锁企…

网络故障与排除(一)

一、Router-ID冲突导致OSPF路由环路 路由器收到相同Router-ID的两台设备发送的LSA&#xff0c;所以查看路由表看到的OSPF缺省路由信息就会不断变动。而当C1的缺省路由从C2中学到&#xff0c;C2的缺省路由又从C1中学到时&#xff0c;就形成了路由环路&#xff0c;因此出现路由不…

登录安全分析报告:小米官网注册

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造成亏损无底洞 …

重学java 51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…

转本人自救指南(上岸之后才敢说的大实话)

专转本的宝子们&#xff0c;一定不要慌&#xff0c;越慌越容易出错&#xff01; 英语一定要早早的准备。背英语单词要一直要坚持&#xff0c;大家要坚持&#xff01;东西要背&#xff01;要坚持做作业&#xff01;每天的坚持和计划很重要&#xff01; 不要把最后的考试题想的太…

Nginx教程(持续更新中~)

浏览器优先查看host文件中的映射&#xff0c;如果host中没有就会从网上CDN找该域名对应的ip,但是目前使用的www.123.com是外卖假设的&#xff0c;CDN中并没有&#xff0c;所以就采用host中填写 第二种weight: 第三种 ip_hash: 第四种 fair: ​​​​​​

常见webshell工具及特征分析

前言 在工作中经常会遇到各种websehll&#xff0c;黑客通常要通过各种方式获取 webshell&#xff0c;从而获得企业网站的控制权&#xff0c;识别出webshell文件或通信流量可以有效地阻止黑客进一步的攻击行为&#xff0c;下面以常见的四款webshell进行分析&#xff0c;对工具连…

【python 进阶】pandas-datetime

官网链接 https://pandas.pydata.org/docs/user_guide/timeseries.html#timeseries-holiday 将时间变成 datetime 格式 df[datetime] pd.to_datetime(df[time])将datetime 列设置为索引&#xff0c;后续才能进行resample 之类的操作 df df.set_index(datetime)按月进行统…

检测头篇 | YOLOv8改进之添加小目标检测头 / 添加大目标检测头 / 减少检测头

前言:Hello大家好,我是小哥谈。本文首先给大家展示原始YOLOv8的网络结构图,然后再对其进行改变,即增加小目标检测头、增加大目标检测头和减少检测头。🌈 目录 🚀1.网络结构图

金融行业专题|超融合对国密卡和国产加密技术的支持能力如何?

目前&#xff0c;不少金融机构都使用国密卡&#xff08;满足国密算法要求的加密卡&#xff09;和国产密码解决方案保障金融信息安全。而在传统虚拟化架构下&#xff0c;单块加密卡通常只能服务一个系统&#xff0c;经常会出现资源利用率低、加密处理性能不足等问题&#xff0c;…

C++中的各种定义

文章目录 前言一、1、unsigned2、_countof、sizeof 总结 前言 一、 1、unsigned 在C语言中&#xff0c;"unsigned"是一个数据类型修饰符&#xff0c;用于修饰整数类型&#xff0c;表示该类型的变量只能存储非负整数&#xff0c;即无符号整数。它可以应用于char、s…

【杂记-浅谈ARP地址解析协议】

1、什么是ARP ARP&#xff0c;Address Resolution Protocol地址解析协议&#xff0c;ARP协议将IP地址解析为MAC地址。主机或三层网络设备上会维护一张ARP表&#xff0c;用于存储IP地址和MAC地址的映射关系&#xff0c;一般ARP表项包括动态ARP表项和静态ARP表项。 2、为什么需…

查看环境中python3安装在哪指令

1. 查看安装在哪&#xff1a; pip install where where python3 2. 查看是否安装&#xff1a; pip freeze | grep transformers

第十五讲:C语言内存函数

第十五讲&#xff1a;C语言内存函数 1.memcpy函数的使用和模拟实现1.1函数原型1.2函数的使用1.3函数使用的注意事项1.4memcpy函数的模拟实现 2.memmove函数的使用和模拟实现2.1函数原型2.2函数使用2.2.1使用函数处理整形数据2.2.2使用函数处理重叠类型&#xff08;源空间和目标…

双时钟系统服务(java)

1、描述介绍 功能&#xff1a;java开发的双时钟系统&#xff08;也可以改成多时钟系统&#xff09; 注意&#xff1a; 1&#xff09;这不是一个定时同步集群时钟的服务&#xff0c;而是一个对外提供时钟同步接口、设置多时钟时间接口、查询多时钟时间接口的服务。即它需要接口…