PyTorch中的Tensor

        PyTorch中的Tensor‌ 是核心数据结构,类似于 NumPy 的多维数组,但具备 GPU 加速和自动求导等深度学习特性。

一、基本概念

  1. 核心数据结构

    • Tensor 是存储和操作数据的基础单元,支持标量(0D)、向量(1D)、矩阵(2D)及更高维数组‌。
    • 与 NumPy 的 ndarray 类似,但支持动态计算图和自动梯度计算‌。
  2. 关键特性

    • GPU 加速‌:可存储在 CPU 或 GPU 中,GPU 计算显著提升性能‌。
    • 自动求导‌:通过 requires_grad=True 启用梯度计算,支持反向传播‌。

二、创建方式

  1. 直接创建

    • 从 Python 列表或元组初始化:
      a = torch.tensor([1, 2, 3])          # 1D Tensor(向量)
      b = torch.tensor([[1.0, 2.0], [3.0, 4.0]])  # 2D Tensor(矩阵)‌
      
    • 指定数据类型(如 dtype=torch.float32)和设备(如 device='cuda')‌。
  2. 初始化方法

    • 全零/全一张量:
      zeros_tensor = torch.zeros((2, 3))   # 2x3 全零张量
      ones_tensor = torch.ones((2, 3))     # 2x3 全一张量‌
      
    • 随机张量:
      rand_tensor = torch.rand((2, 3))     # 值在 [0,1) 的均匀分布‌
  3. 从其他数据结构转换

    • 从 NumPy 数组转换:

       使用 torch.from_numpy(),Tensor 与 NumPy 数组共享内存(修改一方会影响另一方)

      numpy_arr = np.array([1, 2, 3])
      tensor = torch.from_numpy(numpy_arr)  # 共享内存‌

      使用 torch.tensor() 复制数据,生成独立 Tensor:

      tensor = torch.tensor(numpy_arr)  # 不共享内存‌
    • 从图片转换:
      使用 torchvision.transforms
      将 NumPy 格式的图片(HWC 格式,值域 [0, 255])转换为 Tensor(CHW 格式,值域 [0.0, 1.0]):
      from PIL import Image
      from torchvision import transformsimg = Image.open("image.jpg")  # PIL.Image 对象 (H,W,C)
      tensor_trans = transforms.ToTensor()
      tensor_img = tensor_trans(img)  # 转为 Tensor (C, H, W)
      

三、维度与形状

  1. 常见维度类型

    • 0D 张量‌:标量(如 torch.tensor(5))‌。
    • 1D 张量‌:向量(如时间序列数据)‌。
    • 2D 张量‌:矩阵(如表格数据)‌。
    • 3D 张量‌:多通道图像(形状 (C, H, W))‌。
    • 4D 张量‌:批量图像(形状 (N, C, H, W)N 为批量大小)‌。
    • 5D 张量‌:视频或体积数据(如医疗图像)‌。
  2. 形状操作

    • 调整形状:reshape() 或 view()(需保证元素总数不变)‌。
    • 转置:tensor.T 或 transpose()‌。

四、运算与操作

  1. 数学运算

    • 逐元素运算(如 +*torch.sin())‌。
    • 矩阵乘法:torch.matmul() 或 @ 运算符‌。
  2. 索引与切片

    • 类似 NumPy 的索引方式:
      tensor = torch.rand(3, 4)
      row = tensor[0, :]          # 第一行
      column = tensor[:, 1]       # 第二列‌
      
  3. 自动求导

    • 启用梯度跟踪:
      x = torch.tensor(2.0, requires_grad=True)
      y = x**2
      y.backward()                # 计算梯度
      print(x.grad)               # 输出 4.0‌
      

五、其他特性

  1. 数据类型

    • 支持多种类型(如 torch.float32torch.int64),可通过 dtype 参数指定‌。
    • 通过 .float()、.int() 等方法改变 Tensor 的数据类型。
      tensor = torch.tensor([1, 2]).float()  # 转为 float32‌
  2. 设备切换

    • 使用 .to('cuda') 或 .cpu() 在 CPU 和 GPU 间移动张量‌。
      tensor_cpu = torch.tensor([1, 2])
      tensor_gpu = tensor_cpu.to("cuda")  # 转为 GPU Tensor‌

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

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

相关文章

基于Python的图书馆信息管理系统研发

标题:基于Python的图书馆信息管理系统研发 内容:1.摘要 在数字化信息快速发展的背景下,传统图书馆管理方式效率低下,难以满足日益增长的信息管理需求。本研究旨在研发一款基于Python的图书馆信息管理系统,以提高图书馆信息管理的效率和准确性…

RCE复现

1.过滤flag <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);代码审计过滤了"flag"关键词&#xff0c;但限制较弱&#xff0c;容易绕过 ?csystem("ls&…

FPGA_YOLO(四) 部署yolo HLS和Verilog 分别干什么

首先,YOLO作为深度学习模型,主要包括卷积层、池化层、全连接层等。其中,卷积层占据了大部分计算量,尤其适合在FPGA上进行并行加速。而像激活函数(如ReLU)和池化层相对简单,可能更容易用HLS实现。FPGA的优势在于并行处理和定制化硬件加速,因此在处理这些计算密集型任务时…

自动化发布工具CI/CD实践Jenkins介绍!

1. 认识Jenkins 1.1 Jenkins是什么&#xff1f; Jenkins 是一个开源的自动化服务器&#xff0c;主要用于持续集成和持续部署&#xff08;CI/CD&#xff09;。 它由Java编写&#xff0c;因此它可以在Windows、Linux和macOS等大多数操作系统上运行。 Jenkins 提供了一个易于使用…

【愚公系列】《高效使用DeepSeek》039-政务工作辅助

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

深度学习篇---模型训练评估参数

文章目录 前言一、Precision&#xff08;精确率&#xff09;1.1定义1.2意义1.3数值接近11.4数值再0.5左右1.5数值接近0 二、Recall&#xff08;召回率&#xff09;2.1定义2.2意义2.3数值接近12.4数值在0.5左右2.5数值接近0 三、Accuracy&#xff08;准确率&#xff09;3.1定义3…

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)

注册表设置 GPU虚拟化标志 GpuVirtualizationFlags 注册表项用于设置半虚拟化 GPU 的行为。 密钥位于&#xff1a; DWORD HKLM\System\CurrentControlSet\Control\GraphicsDrivers\GpuVirtualizationFlags 定义了以下位&#xff1a; 位描述0x1 ​ 为所有硬件适配器强制设置…

Vue 的 nextTick 是如何实现的?

参考答案&#xff1a; nextTick 的本质将回调函数包装为一个微任务放入到微任务队列&#xff0c;这样浏览器在完成渲染任务后会优先执行微任务。 nextTick 在 Vue2 和 Vue3 里的实现有一些不同&#xff1a; 1. Vue2 为了兼容旧浏览器&#xff0c;会根据不同的环境选择不同包装策…

安卓开发之LiveData与DataBinding

LiveData——生命周期感知 LiveData 是 Android Jetpack 提供的一个生命周期感知的数据持有者类&#xff0c;它可以用于持有数据并在数据发生变化时通知观察者。LiveData 常与 ViewModel 配合使用&#xff0c;帮助简化 UI 层和数据层之间的交互&#xff0c;确保 UI 在合适的生…

TCP协议与wireshark抓包分析

一、tcp协议格式 1. 源端口号 &#xff1a; 发送方使用的端口号 2. 目的端口号 &#xff1a; 接收方使用的端口号 3. 序号: 数据包编号 &#xff0c; tcp 协议为每个数据都设置编号,用于确认是否接收到相应的包 4. 确认序列号 : 使用 tcp 协议接收到数据包&#xff0c…

《HelloGitHub》第 108 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对开源感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

VITA 模型解读,实时交互式多模态大模型的 pioneering 之作

写在前面:实时交互llm 今天回顾一下多模态模型VITA,当时的背景是OpenAI 的 GPT-4o 惊艳亮相,然而,当我们将目光投向开源社区时,却发现能与之匹敌的模型寥寥无几。当时开源多模态大模型(MLLM),大多在以下一个或多个方面存在局限: 模态支持不全:大多聚焦于文本和图像,…

VLAN的高级特性

前言&#xff1a; 1&#xff1a;华为VLAN聚合通过逻辑分层设计&#xff0c;将广播域隔离与子网共享结合&#xff0c;既解决了IP地址浪费问题&#xff0c;又实现了灵活的网络管理 2&#xff1a;MUX VLAN&#xff08;Multiplex VLAN&#xff09;提供了一种通过VLAN进行网络资源控…

制作cass高程点块定义——cad c#二次开发——待调试

public class Demo{[CommandMethod("xx")]public void Demo1(){using var tr1 new DBTrans();var doc Application.DocumentManager.MdiActiveDocument; var db doc.Database;var ed doc.Editor;var 圆心 new Point3d(0, 0, 0); var 半径 10.0;using (var tr …

pod几种常用状态

在 Kubernetes 中&#xff0c;Pod 是最小的可部署单元&#xff0c;Pod 的状态反映了其当前的运行状况。以下是几种常见的 Pod 状态&#xff1a; 1. Pending 描述: Pod 已被 Kubernetes API Server 接收并创建&#xff0c;但还没有开始运行在任何节点上。原因: Pod 资源不足&a…

04 单目标定实战示例

看文本文,您将获得以下技能: 1:使用opencv进行相机单目标定实战 2:标定结果参数含义和数值分析 3:Python绘制各标定板姿态,查看图像采集多样性 4:如果相机画幅旋转90,标定输入参数该如何设置? 5:图像尺寸缩放,标定结果输出有何影响? 6:单目标定结果应用类别…

DevEco Studio编辑器的使用-代码code Linter检查

Code Linter代码检查 Code Linter针对ArkTS/TS代码进行最佳实践/编程规范方面的检查。检查规则支持配置&#xff0c;配置方式请参考配置代码检查规则。 开发者可根据扫描结果中告警提示手工修复代码缺陷&#xff0c;或者执行一键式自动修复&#xff0c;在代码开发阶段&#x…

wokwi arduino mega 2560 - 模数与数模转换AD和DA

截图&#xff1a; 20.53 黄灯灭 不报警 205.77 黄灯亮 报警 链接&#xff1a; https://wokwi.com/projects/415345595312267265 代码&#xff1a; 详细注释版&#xff1a;AD和I2C仿真实验案例程序 cpp #include <LiquidCrystal_I2C.h>// 定义I2C地址和LCD的行列数 #de…

如何使不同的窗体控件,适应不同分辨率的屏幕?

问题 当屏幕分辨率提高或降低时&#xff0c;原分辨率显示正常的控件&#xff0c;将变得很小或很大&#xff0c;字体也变得太大或太小。 解决办法 当分辨率变化时&#xff0c;采用递归的方法&#xff0c;对所有的控件放大或缩小。 public static void MainForm_Load(object s…

虚拟机(一):Java 篇

虚拟机&#xff08;一&#xff09;&#xff1a;Java 篇 虚拟机&#xff08;二&#xff09;&#xff1a;Android 篇 架构 运行时数据区&#xff1a; 栈&#xff1a; 堆&#xff1a; 堆&#xff1a;通过new创建的对象都在堆中分配。OutOfMemoryError TLAB(Thread Local All…