当前位置: 首页 > news >正文

PyTorch——从入门到精通:PyTorch基础知识(张量)【PyTorch系统学习】

什么是张量(Tensor)

      ​ 张量在数学中是一个代数对象,描述了与矢量空间相关的代数对象集之间的多重线性映射。张量是向量和矩阵概念的推广,可以理解为多维数组。作为数学中的一个基本概念,张量有着多种类型,包括但不限于标量、矢量、矩阵以及矢量空间之间的多重线性映射等。张量的不同类型对应于不同的阶数,其中标量是0阶张量,矢量是1阶张量,矩阵是2阶张量,而更高阶的张量则可以表示更复杂的关系和结构。

张量维度代表含义

0维张量

代表的是标量(数字)

1维张量

代表的是向量

2维张量

代表的是矩阵

3维张量

时间序列数据 股价 文本数据 单张彩色图片(RGB)

        张量在物理学、工程学、计算机科学等多个领域中都有广泛的应用,特别是在机器学习和深度学习中,张量是一个核心概念,被广泛用于表示和操作图像、文本和时间序列等复杂数据结构。深度学习框架如 TensorFlow 和 PyTorch 就是以张量为核心数据结构,提供了丰富的张量操作函数,使得模型训练和推理变得更加高效和便捷。

PyTorch张量基础操作

        由于我们的代码是建立在PyTorch的基础上的,因此首先需要导入torch包,这也是我们后续代码的基础。

import torch

创建张量

        1.标量:简单的一个数字,只有大小,没有方向的量.

# 根据现有数字创建标量,并进行简单的运算操作
x = torch.tensor(3.0)
y = torch.tensor(2.0)x + y, x - y, x * y, x / y, x**y

        2.向量:既有大小,又有方向的量。

# 从列表创建张量
tensor_from_list = torch.tensor([1, 2, 3, 4])# 使用arange生成一个从起始值到结束值(不包括结束值)的等差数列张量,1为其步长
tensor_arange = torch.arange(0, 10, 1)# 使用linspace创建张量,同样需要开始值和结束值参数,以及生成的数值个数
tensor_linspace = torch.linspace(0, 100, steps=5)

        3.矩阵:由行和列组成的数组。

# 特定数字的张量,全零张量
zeros_tensor = torch.zeros((2, 3))  # 2行3列# 全一张量
ones_tensor = torch.ones((3, 3))  # 3行3列# 随机数字张量
random_tensor = torch.rand((4, 3))  # 4行3列随机数# 单位矩阵
identity_tensor = torch.eye(3)  # 3x3单位矩阵# 创建与a相同形状的全零张量
a = torch.tensor([[1, 2], [3, 4]])
zeros_like_a = torch.zeros_like(a)

        4.高阶张量

# 直接使用数据创建
tensor = torch.tensor([[[1, 2, 3], [4, 5, 6], [7, 8, 9]],[[10, 11, 12], [13, 14, 15], [16, 17, 18]],[[19, 20, 21], [22, 23, 24], [25, 26, 27]]
])  # 创建一个3x3x3的高阶张量# 使用arange、linespace、zeros创建,如:
tensor_arange=tensor.arange((1,2,3,3)) # 1x2x3x3的高阶张量

张量运算

        元素级运算

        加、减、乘、除、幂运算

a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])a + b, a - b, a * b, a / b, a ** b, torch.pow(a, 2)  # 加、减、乘、除、指数、每个元素平方

        广播机制

        广播机制可以自动扩展小张量与大张量进行运算,这种机制的工作方式如下:1.通过适当复制元素来扩展一个或两个数组,以便在转换之后,两个张量具有相同的形状;2.对生成的数组执行按元素操作。

a = torch.tensor([[1], [2], [3]]) # 形状(1,3)
b = torch.tensor([10, 20])  # 形状(2,2)a + b  # 相加后的形状为(2,3)

        线性代数运算

# 矩阵乘法
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])
matmul_result = torch.matmul(a, b)
print("矩阵乘法结果:", matmul_result)# 转置
transpose_result = a.T
print("转置结果:", transpose_result)# 逆矩阵
square_tensor = torch.tensor([[4.0, 7.0], [2.0, 6.0]])
inv_tensor = torch.inverse(square_tensor)
print("逆矩阵结果:", inv_tensor)

        形状操作

# 对现有的张量重塑形状,这种方式也能够用于创建高阶张量
reshaped_tensor = tensor.arange(0,10,1)reshape((2, 5))  # 将向量调整为2x5的矩阵# 将向量展开为一维
a=tensor.zeros((2,2,3))
flattened_tensor = a.flatten()  # 展开为一维# 张量的拼接,这种方式也能够用于创建高阶张量
a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6]])
concatenated_tensor = torch.cat([a, b], dim=0)  # 沿第0维拼接
print("拼接结果:", concatenated_tensor)# 拆分张量
split_tensors = torch.chunk(a, 2, dim=0)  # 沿第0维拆分为2部分
print("拆分结果:", split_tensors)# 增加维度
a = torch.tensor([1, 2, 3])
expanded_tensor = a.unsqueeze(0)  # 在第0维增加维度
print("增加维度结果:", expanded_tensor)# 减少维度
a = torch.tensor([[[1, 2], [3, 4]]])
squeezed_tensor = a.squeeze()  # 删除维度为1的轴
print("减少维度结果:", squeezed_tensor)

        张量的统计运算

# 求和、求积
a = torch.tensor([[1, 2], [3, 4]])
sum_result = torch.sum(a)  # 所有元素求和
prod_result = torch.prod(a)  # 所有元素求积
print("求和结果:", sum_result)
print("求积结果:", prod_result)# 最大值、最小值
max_result = torch.max(a)  # 最大值
min_result = torch.min(a)  # 最小值
print("最大值:", max_result)
print("最小值:", min_result)# 按维度聚合
sum_along_dim = torch.sum(a, dim=0)  # 按列求和
print("按维度求和结果:", sum_along_dim)

感谢阅读,希望对你有所帮助~

相关文章:

PyTorch——从入门到精通:PyTorch基础知识(张量)【PyTorch系统学习】

什么是张量(Tensor) ​ 张量在数学中是一个代数对象,描述了与矢量空间相关的代数对象集之间的多重线性映射。张量是向量和矩阵概念的推广,可以理解为多维数组。作为数学中的一个基本概念,张量有着多种类型,…...

(笔记)ubuntu20安装jdk7,多版本管理

前往 Oracle JDK 7 下载页面&#xff08;需要 Oracle 账户&#xff09;&#xff0c;下载 JDK 7 的压缩包文件&#xff08;.tar.gz&#xff09;。 下载完成后&#xff0c;将文件解压到 /opt 目录&#xff1a; sudo tar -xzf jdk-7u<version>-linux-x64.tar.gz -C /opt 重…...

Python系列教程

文章目录 1. Python基础2. Python基础库3. Python数据分析 1. Python基础 语句数据类型表达式输入、输出与文件读写函数模块与包类与面向对象作用域与命名空间常用技巧与操作 2. Python基础库 Typing库 3. Python数据分析...

如何恢復電腦IP地址的手動設置?

手動設置IP地址後&#xff0c;可能會遇到一些網路連接問題&#xff0c;或者需要恢復到之前的自動獲取狀態。這篇文章將詳細介紹如何恢復電腦的IP地址設置。 為什麼需要恢復IP地址設置&#xff1f; 網路連接問題&#xff1a;手動設置IP地址後&#xff0c;可能會導致與路由器或…...

Linux 下敏感文件路径总结

Linux 下敏感文件路径总结 在服务器运维和安全测试过程中&#xff0c;掌握各类服务的关键配置文件路径、日志文件位置以及重要目录的存放位置至关重要。本文整理了 Linux 系统下常见服务&#xff08;如 Apache、Nginx、MySQL 等&#xff09;的路径结构&#xff0c;以及一些敏感…...

gitlab 服务器集群配置及 存储扩展配置

配置 GitLab 服务器集群并实现存储扩展是一个复杂的任务&#xff0c;但可以通过以下步骤来实现。GitLab 本身支持高可用性和分布式部署&#xff0c;可以显著提高系统的可靠性和性能。 ### 1. 规划和准备 #### 1.1 确定服务器数量 - **1 台负载均衡器**&#xff1a;用于分发请…...

3D Gaussian Splatting 代码层理解之Part2

现在让我们来谈谈高斯分布。我们已经在Part1介绍了如何根据相机的位置获取 3D 点并将其转换为 2D。在本文中,我们将继续处理高斯泼溅的高斯部分。这里用到的是代码库 GitHub 中part2. 我们在这里要做的一个小改动是,我们将使用透视投影,它利用与上一篇文章中所示的不同内部…...

.length和.length()有什么区别?什么情况下使用哪个?

在编写程序的时候&#xff0c;我们经常发现有时候需要得到长度的时候我们使用函数.length&#xff0c;而有的时候用的却是.length()。 在对Java一知半解的时候&#xff0c;我曾产生了深深的疑惑&#xff0c;到底这两个有什么区别&#xff0c;为什么有时候要有括号&#xff0c;而…...

React Native 全栈开发实战班 - 网络与数据之 websock与服务端交互

1.4 使用 WebSocket 实现实时通信 除了 fetch 和 axios 这样的 HTTP 请求方式&#xff0c;React Native 还支持 WebSocket&#xff0c;用于实现客户端与服务器之间的实时双向通信。WebSocket 适用于需要实时数据推送的场景&#xff0c;如聊天应用、实时通知、实时数据更新等。…...

黑马智慧商城项目学习笔记

目录 智慧商城项目创建项目调整初始化目录vant组件库vant按需导入和全部导入 项目中的vw适配路由设计配置登录页静态布局图形验证码功能request模块-axios封装api模块-封装图片验证码接口 Toast轻提示&#xff08;vant组件&#xff09;短信验证倒计时功能登录功能响应拦截器统一…...

计算机网络WebSocket——针对实习面试

目录 计算机网络WebSocket什么是WebSocket&#xff1f;WebScoket和HTTP协议的区别是什么?说明WebSocket的优势和使用场景&#xff1f;说明WebSocket的建立连接的过程&#xff1f; 计算机网络WebSocket 什么是WebSocket&#xff1f; WebSocket是一个网络通信协议&#xff0c;提…...

请介绍一下Python的网络编程以及如何使用socket模块进行网络通信

1、请介绍一下Python的网络编程以及如何使用socket模块进行网络通信。 Python中的网络编程主要是通过socket模块实现的。Socket模块提供了基本的套接字接口&#xff0c;使得Python程序可以连接到网络上的其他设备或服务。下面是对Python网络编程和socket模块的基本介绍以及如何…...

【第三课】Rust变量与数据类型(二)

目录 前言 Vector HashMap 其他 前言 上一课介绍了rust的变量和常见的数据类型&#xff0c;走马观花的看了一下rust常见的变量和数据类型&#xff0c;这些都是rust的基本语法&#xff0c;整理出来只是起一个引子的效果&#xff0c;基本语法多练习才可以熟练。这一课继续介绍…...

vue使用List.reduce实现统计

需要对集合的某些元素的值进行计算时&#xff0c;可以在计算属性中使用forEach方法 1.语法&#xff1a;集合.reduce ( ( 定义阶段性累加后的结果 , 定义遍历的每一项 ) > 定义每一项求和逻辑执行后的返回结果 , 定义起始值 ) 2、简单使用场景&#xff1a;例如下面…...

Linux网络:HTTPS协议

Linux网络&#xff1a;HTTPS协议 加密方式对称加密非对称加密混合加密中间人攻击 证书数据签名CA认证 HTTPSSSL/TSLHTTPS 在HTTP协议中&#xff0c;所有的数据都采用明文的形式传输&#xff0c;这就会导致数据非常容易泄露&#xff0c;只要拿到HTTP报文&#xff0c;就可以窃取各…...

http常⻅请求头和响应头详细讲解(笔记)

http常⻅请求头状态码 简介&#xff1a;讲解http常⻅见的请求⽅方法和使⽤用 http1.0定义了了三种&#xff1a;GET: 向服务器器获取资源&#xff0c;⽐比如常⻅见的查询请求POST: 向服务器器提交数据⽽而发送的请求Head: 和get类似&#xff0c;返回的响应中没有具体的内容&am…...

【c++丨STL】list的使用

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C、STL 目录 前言 list简介 一、list的默认成员函数 构造函数(constructor) 析构函数 赋值重载 二、list的迭代器接口 迭代器的功能分类 三、list的容量…...

系统掌握大语言模型提示词 - 从理论到实践

以下是我目前的一些主要个人标签&#xff1a; 6 年多头部大厂软件开发经验&#xff1b;1 年多 AI 业务应用经验&#xff0c;拥有丰富的业务提示词调优经验和模型微调经验。信仰 AGI&#xff0c;已经将 AI 通过自定义 Chatbot /搭建 Agent 融合到我的工作流中。头部大厂技术大学…...

cocosCreator视频web模式播放踩坑解决

/*** 对外输出接口*/ export interface VideoPlayerManageInterface {//初始化视频播放器init(list: VideoPlayerManageInitListType[],options?: VideoPlayerManageInitOptionsType): Promise<void>;//播放视频play(url: string, currentTime?: number): Promise<v…...

c++头文件中 #ifndef的作用

避免文件重复处理、变量等重定义 //c1.hpp #ifndef C1_HPP #define C1_HPP int a 0; #endif // LFU_CACHE_HPP#include"c1.hpp" #ifndef C2_HPP #define C2_HPP int b1; #endif#include"c1.hpp" #include"c2.hpp" #include<iostream> in…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

C++--string的模拟实现

一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现&#xff0c;其目的是加强对string的底层了解&#xff0c;以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量&#xff0c;…...

Canal环境搭建并实现和ES数据同步

作者&#xff1a;田超凡 日期&#xff1a;2025年6月7日 Canal安装&#xff0c;启动端口11111、8082&#xff1a; 安装canal-deployer服务端&#xff1a; https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz cd /opt/homebrew/etc mkdir canal…...

leetcode_69.x的平方根

题目如下 &#xff1a; 看到题 &#xff0c;我们最原始的想法就是暴力解决: for(long long i 0;i<INT_MAX;i){if(i*ix){return i;}else if((i*i>x)&&((i-1)*(i-1)<x)){return i-1;}}我们直接开始遍历&#xff0c;我们是整数的平方根&#xff0c;所以我们分两…...

【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space

问题&#xff1a;IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案&#xff1a;将编译的堆内存增加一点 位置&#xff1a;设置setting-》构建菜单build-》编译器Complier...

Python 解释器安装全攻略(适用于 Linux / Windows / macOS)

目录 一、Windows安装Python解释器1.1 下载并安装Python解释1.2 测试安装是否成功1.3 设置pip的国内镜像------永久配置 二、macOS安装Python解释器三、Linux下安装Python解释器3.1 Rocky8.10/Rocky9.5安装Python解释器3.2 Ubuntu2204/Ubuntu2404安装Python解释器3.3 设置pip的…...