深度学习02-pytorch-03-张量的数值计算

news2024/9/23 1:56:34

张量(Tensor)是多维数组的通用化概念,它可以表示标量(0维)、向量(1维)、矩阵(2维)以及更高维度的数据。在深度学习和数值计算中,张量是基础数据结构,特别是在 PyTorch 和 TensorFlow 等框架中,张量用于存储和操作数据。张量的数值计算可以包括基本的算术操作、线性代数运算、自动微分等。

下面我们来详细讨论张量的数值计算,包括常用的操作和具体示例。

1. 张量的创建

可以通过不同的方式创建张量,包括从列表、数组等生成张量。

​

 import torch
 
# 创建一个标量张量
scalar = torch.tensor(5)
print(scalar)
 
# 创建一个向量(1维张量)
vector = torch.tensor([1.0, 2.0, 3.0])
print(vector)
 
# 创建一个矩阵(2维张量)
matrix = torch.tensor([[1, 2], [3, 4]])
print(matrix)
 
# 创建一个3维张量
tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(tensor_3d)

2. 张量的基本运算

张量可以进行各种基本的算术运算,如加法、减法、乘法、除法等。张量的这些操作可以是逐元素操作(element-wise),即对每个位置的元素进行操作。

加法、减法、乘法、除法
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
print(a)
print(b)

# 逐元素加法
print(a + b)
 
# 逐元素减法
print(a - b)
 
# 逐元素乘法
print(a * b)
 
# 逐元素除法
print(a / b)

3. 矩阵乘法

对于 2 维张量(矩阵),可以进行矩阵乘法。

A = torch.tensor([[1, 2], [3, 4],[5,6]])
B = torch.tensor([[5, 6], [7, 8]])
print(A)
print(B)

# 矩阵乘法(@ 操作符)
C = A @ B
print(C)

矩阵乘法的结果会是两个矩阵的行与列相乘求和后的结果。

4. 广播机制(Broadcasting)

当张量的形状不同,但可以通过扩展成兼容的形状进行运算时,PyTorch 会自动应用广播机制。广播是为了避免手动调整张量形状,使得小尺寸的张量与大尺寸张量进行兼容的运算。

x = torch.tensor([1, 2, 3])
y = torch.tensor([[1], [2], [3]])
print(x)
print(y)

# 逐元素相加,广播机制会将 y 扩展为 [3,3] 的大小
print(x + y)

5. 张量的维度操作

可以对张量的维度进行变换,如改变形状、添加或移除维度。

改变张量形状(Reshape)
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]]) # (2 ,3)
print(tensor)
reshaped_tensor = tensor.view(3, 2)  # 改变形状为 (3, 2)
print(reshaped_tensor)
添加和移除维度
# 添加维度
tensor = torch.tensor([1, 2, 3])
print(tensor)
tensor_unsqueeze = tensor.unsqueeze(0)  # 在第0维添加一个维度
print(tensor_unsqueeze)

# 移除维度
tensor_squeeze = tensor_unsqueeze.squeeze()  # 移除多余的1维
print(tensor_squeeze)

6. 线性代数运算

张量支持各种线性代数运算,如矩阵转置、矩阵求逆、矩阵分解等。

矩阵转置
A = torch.tensor([[1, 2], [3, 4]])
print(A)
A_transposed = A.T  # 或者使用 A.transpose(0, 1)
print(A_transposed)
矩阵求逆
A = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
print(A)
A_inverse = torch.inverse(A)
print(A_inverse)
矩阵行列式
A = torch.tensor([[1.0, 5.0], [3.0, 4.0]])
print(A)
det_A = torch.det(A)
print(det_A)

7. 自动微分

PyTorch 中的张量可以通过设置 requires_grad=True 来启用自动微分功能。在反向传播时,PyTorch 会自动计算梯度。

# 创建张量并启用梯度
x = torch.tensor(2.0, requires_grad=True)

# 定义一个简单的函数
y = x ** 2

# 计算梯度(反向传播)
y.backward()

# 查看梯度(dy/dx)
print(x.grad)  # 输出为 4.0

8. 随机数生成

张量可以通过多种方式生成随机数。

# 生成标准正态分布的随机数
random_tensor = torch.randn(3, 3)
print(random_tensor)

# 生成均匀分布的随机数
uniform_tensor = torch.rand(3, 3)
print(uniform_tensor)

9. GPU 加速计算

PyTorch 支持将张量移动到 GPU 上进行加速计算。

# 检查是否有可用的 GPU
if torch.cuda.is_available():
   device = torch.device('cuda')
   tensor = torch.tensor([1.0, 2.0, 3.0], device=device)
   print(tensor)

总结

张量是多维数组的泛化,广泛应用于深度学习和数值计算。通过基本的算术操作、线性代数运算、维度操作等,我们可以高效地处理大规模数据。同时,PyTorch 还支持自动微分和 GPU 加速,这使得它在深度学习领域非常流行。

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

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

相关文章

[Python学习日记-27] 文件操作练习题解析

[Python学习日记-27] 文件操作练习题解析 简介 练习题1——全局替换程序 练习题2——模拟登陆 简介 练习题1——全局替换程序 一、题目 写一个脚本,允许用户按以下方式执行时填入参数,即可以对指定文件内容进行全局替换 python your_script.py old…

Mybatis in用法优化

如果in的参数过多&#xff0c;mybatis会报错 原来写法&#xff1a;select * from file_inf a <where>and a.status 0 and a.id in<foreach collection"ids" open"(" close")" separator"," item"id" #{id}</for…

ConflictingBeanDefinitionException | 运行SpringBoot项目时报错bean定义冲突解决方案

具体报错&#xff1a; Caused by: org.springframework.context.annotation.ConflictingBeanDefinitionException: Annotation-specified bean name ‘CommissionMapperImpl’ for bean class [com.xxx.mapper.carrier.CommissionMapperImpl] conflicts with existing, non-co…

MAC激活Typora以及禁止成功激活弹窗的方法

激活 Typora 首先在官网下载 Typora 的最新版 并且安装。 打开以下目录 /Applications/Typora.app/Contents/Resources/TypeMark/page-dist/static/js/ 注意在 Applications 中&#xff0c;需要对 Typora 右键选择 Show Packages Contents 即可进入 Typora.app。 在该目录的文…

探索未来智能:Moonshot AI 引领AI新纪元——M1超级模型

在人工智能的快速演进中&#xff0c;Moonshot AI再次站在了技术创新的前沿。推出M1超级模型&#xff0c;这是一款旨在突破现有AI能力极限的革命性产品。 M1超级模型的诞生背景 随着数据量的爆炸性增长和计算能力的提升&#xff0c;AI模型正变得越来越复杂和强大。M1超级模型…

华为HarmonyOS地图服务 1 -- 如何实现地图呈现?

如何使用地图组件MapComponent和MapComponentController呈现地图&#xff0c;效果如下图所示。 MapComponent是地图组件&#xff0c;用于在您的页面中放置地图。MapComponentController是地图组件的主要功能入口类&#xff0c;用来操作地图&#xff0c;与地图有关的所有方法从此…

从规范到实现解读Windows平台如何播放RTSP流

RTSP播放器应用场景 RTSP播放器在视频监控、远程视频会议、网络电视、实时流媒体传输、协同操控相关的智能设备、教育培训以及企业内部通讯与协作等多个领域都有着广泛的应用场景。 1. 视频监控 RTSP直播播放器在视频监控系统中扮演着重要角色。通过RTSP协议&#xff0c;播放…

Java—SPI 机制详解

参考文章 Java常用机制 - SPI机制详解 | Java 全栈知识体系包含: Java 基础, Java 部分源码, JVM, Spring, Spring Boot, Spring Cloud, 数据库原理, MySQL, ElasticSearch, MongoDB, Docker, k8s, CI&CD, Linux, DevOps, 分布式, 中间件, 开发工具, Git, IDE, 源码阅读&a…

安全带检测系统源码分享

安全带检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

OpenCV基础入门30讲(Python)——第三讲 图像对象的创建与赋值

在OpenCV里&#xff0c;对图像的操作是最为基本的。接下来我们看一下图像对象的创建与赋值。 注&#xff1a;前文介绍过的代码和操作不再重复。 代码 在 main 文件中&#xff0c;先导入新的模块 # 导入 numpy 模块&#xff0c;重命名为 np import numpy as np 再写进以下代…

一条龙小程序开发教程

初次上手 微信小程序已经成为国内前端的一个重要业务&#xff0c;跟 Web 和手机 App 有着同等的重要性。小程序开发者供不应求&#xff0c;市场招聘需求极其旺盛&#xff0c;企业都抢着要。 尽管如此&#xff0c;小程序的教程却很缺&#xff0c;要么是不够系统&#xff0c;要么…

Python 从入门到实战24(类的继承)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了类的定义、使用方法、property的相关知识。今…

PHP API 框架:构建高效API的利器

在当今快速发展的互联网时代&#xff0c;API&#xff08;应用程序编程接口&#xff09;已成为连接不同应用程序和服务的关键。PHP&#xff0c;作为一种流行的服务器端脚本语言&#xff0c;提供了多种强大的框架来简化API的开发。本文将介绍PHP API框架的重要性&#xff0c;以及…

嵌入式系统基础讲解

​ 大家好&#xff0c;我是程序员小羊&#xff01; 前言&#xff1a; 嵌入式系统是计算机科学与电子工程的交叉领域&#xff0c;广泛应用于消费电子、工业控制、汽车、医疗设备等多个行业。嵌入式系统设计涉及硬件和软件的协同开发&#xff0c;要求开发者掌握多方面的基础知识。…

Tomcat系列漏洞复现

CVE-2017-12615——Tomcat put⽅法任意⽂件写⼊漏洞 漏洞描述 当 Tomcat运⾏在Windows操作系统时&#xff0c;且启⽤了HTTP PUT请求⽅法&#xff08;例如&#xff0c;将 readonly初始化参数由默认值设置为false&#xff09;&#xff0c;攻击者将有可能可通过精⼼构造的攻击请求…

mybatis 配置文件完成增删改查(四) :多条件 动态sql查询

文章目录 就是你在接收数据时&#xff0c;有的查询条件不写&#xff0c;也能从查到相应的stauts也可能为空恒等式标签 代替where关键字 就是你在接收数据时&#xff0c;有的查询条件不写&#xff0c;也能从查到相应的 注意是写字段名 还是 属性名 companyName不写也能查出满足…

K8s容器运行时,移除Dockershim后存在哪些疑惑?

K8s容器运行时&#xff0c;移除Dockershim后存在哪些疑惑&#xff1f; 大家好&#xff0c;我是秋意零。 K8s版本截止目前&#xff08;24/09&#xff09;已经发布到了1.31.x版本。早在K8s版本从1.24.x起&#xff08;22/05&#xff09;&#xff0c;默认的容器运行时就不再是Doc…

车载测试项目实操学习:CAN通信测试、UDS诊断测试、自动化测试、功能安全测试、CAN一致性测试、HIL测试:9-20

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

【d46】【Java】【力扣】876.链表的中间结点

思路 先获得总体长度&#xff0c; 再得到中间节点 的索引&#xff0c;&#xff0c;这里的索引是从1开始的索引&#xff0c;而不是从0开始的索引(这种理解方式更简单) 排错&#xff1a;另一个思路&#xff1a;将链表都放进list&#xff0c;获得中间的数字&#xff0c;然后遍历…

AIGC8: 高通骁龙AIPC开发者大会记录B

图中是一个小男孩在市场卖他的作品。 AI应用开发出来之后&#xff0c;无论是个人开发者还是企业开发者。 如何推广分发是面临的大问题。 做出来的东西一定要符合商业规律。否则就是实验室里面的玩物&#xff0c;或者自嗨的东西。 背景 上次是回顾和思考前面两个硬件营销总的…