PyTorch使用教程- Tensor包

news2025/1/21 11:01:09

### PyTorch使用教程- Tensor包

PyTorch是一个流行的深度学习框架,它提供了一个易于使用的API来创建和操作张量(Tensors)。张量是一个多维数组,类似于NumPy中的ndarray,但它是基于GPU的,支持自动求导。本文将详细介绍PyTorch中的Tensor包,包括张量的创建、运算、形状变换、索引与切片、以及重要的张量处理方式。

#### 一、张量的创建

在PyTorch中,可以使用多种方法创建张量。以下是一些常用的创建张量的方法:

1. **torch.tensor()**

   使用`torch.tensor()`函数可以直接从数据中创建张量。数据类型会自动推断。

   ```python
   import torch
   data = [[1, 2], [3, 4]]
   x_data = torch.tensor(data)
   print(x_data)
   ```

2. **torch.from_numpy()**

   如果有一个NumPy数组,可以使用`torch.from_numpy()`函数将其转换为PyTorch张量。

   ```python
   import numpy as np
   np_array = np.array(data)
   x_np = torch.from_numpy(np_array)
   print(x_np)
   ```

3. **torch.ones_like() 和 torch.zeros_like()**

   使用`torch.ones_like()`和`torch.zeros_like()`函数可以创建一个与给定张量形状相同但所有元素分别为1和0的新张量。

   ```python
   x_ones = torch.ones_like(x_data)
   print(x_ones)
   x_zeros = torch.zeros_like(x_data)
   print(x_zeros)
   ```

4. **torch.rand() 和 torch.randn()**

   `torch.rand()`函数创建一个形状为指定维度的张量,其元素是从[0, 1)区间均匀分布的随机数。`torch.randn()`函数则创建一个形状为指定维度的张量,其元素是从标准正态分布(均值为0,方差为1)中抽取的随机数。

   ```python
   rand_tensor = torch.rand((2, 3))
   print(rand_tensor)
   randn_tensor = torch.randn((2, 3))
   print(randn_tensor)
   ```

5. **torch.full()**

   使用`torch.full()`函数可以创建一个填充常数的张量。

   ```python
   full_tensor = torch.full((3, 3), 5.)
   print(full_tensor)
   ```

6. **torch.arange()**

   `torch.arange()`函数生成一个从起始值到结束值(不包括结束值),步长为指定值的张量。

   ```python
   range_tensor = torch.arange(1, 20, 2)
   print(range_tensor)
   ```

7. **torch.empty()**

   `torch.empty()`函数创建一个指定形状的未初始化张量。

   ```python
   empty_tensor = torch.empty((2, 3))
   print(empty_tensor)
   ```

#### 二、张量的运算

PyTorch提供了丰富的张量运算操作,包括算术运算、线性代数运算、矩阵操作等。以下是一些常用的张量运算:

1. **算术运算**

   - **加法**:使用`torch.add()`函数或`+`运算符进行加法运算。

     ```python
     a = torch.randn(2, 3)
     b = torch.randn(2, 3)
     c = torch.add(a, b)
     print(c)
     d = a + b
     print(d)
     ```

   - **标量加法**:将一个张量与一个标量相加。

     ```python
     e = torch.add(d, 10)
     print(e)
     ```

   - **绝对值**:使用`torch.abs()`函数计算张量的绝对值。

     ```python
     abs_tensor = torch.abs(a)
     print(abs_tensor)
     ```

   - **乘法**:使用`torch.mul()`函数或`*`运算符进行乘法运算。

     ```python
     z1 = a * a
     z2 = torch.mul(a, a)
     print(z1)
     print(z2)
     ```

   - **除法**:使用`torch.div()`函数或`/`运算符进行除法运算。

     ```python
     div_tensor = torch.div(a, b)
     print(div_tensor)
     ```

   - **幂运算**:使用`torch.pow()`函数计算张量的幂。

     ```python
     pow_tensor = torch.pow(a, 2)
     print(pow_tensor)
     ```

2. **矩阵运算**

   - **矩阵乘法**:使用`torch.mm()`函数或`@`运算符进行矩阵乘法运算。

     ```python
     matrix1 = torch.tensor([[1, 2], [3, 4]])
     matrix2 = torch.tensor([[5, 6], [7, 8]])
     result_matrix = torch.mm(matrix1, matrix2)
     print(result_matrix)
     result_matrix_2 = matrix1 @ matrix2
     print(result_matrix_2)
     ```

   - **矩阵转置**:使用`torch.t()`函数计算矩阵的转置。

     ```python
     transposed_matrix = torch.t(matrix1)
     print(transposed_matrix)
     ```

3. **统计运算**

   - **求和**:使用`torch.sum()`函数计算张量元素的和。

     ```python
     tensor = torch.tensor([[1, 2], [3, 4]])
     sum_result = torch.sum(tensor)
     print(sum_result)
     ```

   - **平均值**:使用`torch.mean()`函数计算张量元素的平均值。

     ```python
     mean_result = torch.mean(tensor)
     print(mean_result)
     ```

   - **标准差**:使用`torch.std()`函数计算张量元素的标准差。

     ```python
     std_result = torch.std(tensor)
     print(std_result)
     ```

   - **最大值和最小值**:使用`torch.max()`和`torch.min()`函数找到张量中的最大值和最小值及其索引。

     ```python
     max_value, max_index = torch.max(tensor, dim=1)
     print(max_value)
     print(max_index)
     min_value, min_index = torch.min(tensor, dim=1)
     print(min_value)
     print(min_index)
     ```

#### 三、张量的形状变换

1. **torch.view()**

   使用`torch.view()`函数可以改变张量的形状,但要确保元素数量不变。

   ```python
   original_tensor = torch.arange(1, 9)
   reshaped_tensor = original_tensor.view(2, 4)
   print(reshaped_tensor)
   ```

2. **torch.reshape()**

   `torch.reshape()`函数与`torch.view()`类似,但提供了更多的灵活性,可以在某些情况下自动推断维度。

   ```python
   reshaped_tensor_2 = original_tensor.reshape(2, 4)
   print(reshaped_tensor_2)
   ```

#### 四、张量的拼接与索引

1. **torch.cat()**

   使用`torch.cat()`函数可以沿指定维度拼接张量。

   ```python
   tensor1 = torch.tensor([[1, 2], [3, 4]])
   tensor2 = torch.tensor([[5, 6]])
   concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)
   print(concatenated_tensor)
   ```

2. **索引与切片**

   使用索引和切片可以获取张量的特定元素或子集。

   ```python
   matrix_tensor = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
   first_row = matrix_tensor[0, :]
   print(first_row)
   first_column = matrix_tensor[:, 0]
   print(first_column)
   subset_tensor = matrix_tensor[1:, 1:]
   print(subset_tensor)
   ```

#### 五、重要的张量处理方式

1. **clamp()**

   `torch.clamp()`函数对输入张量按照自定义的范围进行裁剪。

   ```python
   a = torch.

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

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

相关文章

【Maui】下拉框的实现,绑定键值对

文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/05795ee1c24c49129b822b530ef58302.png) 前言 .NET 多平台应用 UI (.NET MA…

ARCGIS国土超级工具集1.3更新说明

ARCGIS国土超级工具集V1.3版本,功能已增加至49 个。在V1.2的基础上修复了若干使用时发现的BUG,完善了部分已有的功能,新增了“面要素狭长面检测分割”等功能,新工具使用说明如下: 一、勘测定界工具栏更新土地分类面积表…

HunyuanDiT代码笔记

HunyuanDiT 是由腾讯发布的文生图模型,适配中英双语。 在模型方面的改进,主要包括: transformer结构text encoderpositional encoding Improving Training Stability To stabilize training, we present three techniques: We add layer nor…

DDD - 如何设计支持快速交付的DDD技术中台

文章目录 Pre概述打造快速交付团队烟囱式的开发团队(BAD)大前端技术中台(GOOD) 技术中台的特征简单易用的技术中台建设总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服务、实体与值对象的两种设计思路…

服务器硬盘RAID速度分析

​ 在现代数据中心和企业环境中,服务器的存储性能至关重要,RAID(独立磁盘冗余阵列)技术通过将多块硬盘组合成一个逻辑单元,提供了数据冗余和性能优化,本文将详细探讨不同RAID级别对服务器硬盘速度的影响&am…

【Docker】搭建一个功能强大的自托管虚拟浏览器 - n.eko

前言 本教程基于群晖的NAS设备DS423的docker功能进行搭建,DSM版本为 DSM 7.2.2-72806 Update 2。 n.eko 支持多种类型浏览器在其虚拟环境中运行,本次教程使用 Chromium​ 浏览器镜像进行演示,支持访问内网设备和公网地址。 简介 n.eko 是…

五、华为 RSTP

RSTP(Rapid Spanning Tree Protocol,快速生成树协议)是 STP 的优化版本,能实现网络拓扑的快速收敛。 一、RSTP 原理 快速收敛机制:RSTP 通过引入边缘端口、P/A(Proposal/Agreement)机制等&…

“深入浅出”系列之C++:(9)线程分离

线程分离的基本概念 线程分离是通过调用 std::thread::detach() 方法实现的。当线程被分离时,它会成为一个独立的线程,并且会自动管理自己的资源。当该线程完成执行时,它会自动清理资源,父线程不再需要等待或回收这个线程。 线程…

Day 13 卡玛笔记

这是基于代码随想录的每日打卡 144. 二叉树的前序遍历 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入: root [1,null,2,3] 输出:[1,2,3] 解释: 示例 2: 输入: ro…

【STM32项目实战系列】系列开篇导语

【这个系列到底是什么】 简单来讲就是基于STM32的主控芯片的实际应用项目的介绍(当然根据不同的项目功能特性需要使用不同的系列的ST主控芯片),这里面会涉及到基础工程的建立、各种驱动外设、中断和时钟的配置、RTOS的移植方法、文件系统的移…

产业园管理系统赋能企业精细管理与效益提升新路径

内容概要 现在的企业运营面临着越来越复杂的管理挑战,尤其是在园区管理领域。为了提升管理效率和经营效益,产业园管理系统的推出无疑为众多企业提供了全新的解决方案。这套系统通过智能化技术,将资产管理、租赁管理与财务监控等多个功能有机…

论文笔记(六十二)Diffusion Reward Learning Rewards via Conditional Video Diffusion

Diffusion Reward Learning Rewards via Conditional Video Diffusion 文章概括摘要1 引言2 相关工作3 前言4 方法4.1 基于扩散模型的专家视频建模4.2 条件熵作为奖励4.3 训练细节 5 实验5.1 实验设置5.2 主要结果5.3 零样本奖励泛化5.4 真实机器人评估5.5 消融研究 6 结论 文章…

鸿蒙中选择地区

1.首页ui import { CustomDialogExampleSelectRegion } from ./selectRegion/SelectRegionDialog;Entry Component struct Index {State selectedRegion: string 选择地区// 地区dialogControllerSelectRegion: CustomDialogController | null new CustomDialogController({b…

【HarmonyOS NAPI 深度探索12】创建你的第一个 HarmonyOS NAPI 模块

【HarmonyOS NAPI 深度探索12】创建你的第一个 HarmonyOS NAPI 模块 在本篇文章中,我们将一步步走过如何创建一个简单的 HarmonyOS NAPI 模块。通过这个模块,你将能够更好地理解 NAPI 的工作原理,并在你的应用中开始使用 C 与 JavaScript 的…

excel实用工具

持续更新… 文章目录 1. 快捷键1.1 求和 2. 命令2.1 查找 vloopup 1. 快捷键 1.1 求和 windows: alt mac : command shift T 2. 命令 2.1 查找 vloopup vlookup 四个入参数 要查找的内容 (A2 6xx1)查找的备选集 (C2:C19)…

Linux中的基本指令(一)

一、Linux中指令的存在意义 Linux中,通过输入指令来让操作系统执行,以此达到控制操作系统的目的,类似于Windows中的双击,右键新建文件,新建文件夹等 1.补:关于屏幕的几个操作指令 ①清屏指令 clear 回…

深入解析 C++17 中的 u8 字符字面量:提升 Unicode 处理能力

在现代软件开发中,处理多语言文本是一个常见需求,特别是在全球化的应用场景下。C17 标准引入的 u8 字符字面量为开发者提供了一个强大的工具,以更有效地处理和表示 UTF-8 编码的字符串。本文将详细探讨 u8 字符字面量的技术细节、实际应用&am…

2025年国产化推进.NET跨平台应用框架推荐

2025年国产化推进.NET跨平台应用框架推荐 1. .NET MAUI NET MAUI是一个开源、免费(MIT License)的跨平台框架(支持Android、iOS、macOS 和 Windows多平台运行),是 Xamarin.Forms 的进化版,从移动场景扩展到…

C++和OpenGL实现3D游戏编程【连载21】——父物体和子物体模式实现

欢迎来到zhooyu的专栏。 🔥C和OpenGL实现3D游戏编程【专题总览】 1、本节要实现的内容 上节课我们已经创建了一个基础Object类,以后所有的游戏元素都可以从这个基类中派生出来。同时为了操作方便,我们可以为任意两个Object类(及其…

unity插件Excel转换Proto插件-ExcelToProtobufferTool

unity插件Excel转换Proto插件-ExcelToProtobufferTool **ExcelToProtobufTool 插件文档****1. 插件概述****2. 默认配置类:DefaultIProtoPathConfig****属性说明** **3. 自定义配置类****定义规则****示例代码** **4. 使用方式****4.1 默认路径****4.2 自定义路径**…