PyTorch使用教程- Tensor包

### 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.rhkb.cn/news/4707.html

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

相关文章

uniapp——App 监听下载文件状态,打开文件(三)

5 实现下载文件并打开 这里演示,导出Excel 表格 文章目录 5 实现下载文件并打开DEMO监听下载进度效果图为什么 totalSize 一直为0? 相关Api: downloader DEMO 提示: 请求方式支持:GET、POST;POST 方式需要…

mybatis的多对一、一对多的用法

目录 1、使用VO聚合对象(可以解决这两种情况) 多对一: 一对多: 2、非聚合的多对一做法: 3、非聚合的一对多做法: 1、使用VO聚合对象(可以解决这两种情况) 当我需要多对一、一对…

Vscode:问题解决办法 及 Tips 总结

Visual Studio Code(简称VSCode)是一个功能强大的开源代码编辑器,广泛用于各种编程语言和开发场景,本博客主要记录在使用 VSCode 进行verilog开发时遇到的问题及解决办法,使用过程中的技巧 文章目录 扩展安装失败调试配…

MySQL 窗口函数

MySQL 窗口函数 1,窗口函数 1.1,什么是窗口函数1.2,基本语法 2,函数详解 2.1,聚合函数2.2,排序函数2.3,偏移函数2.4,值函数 3,进阶用法 1,窗口函数 1.1&am…

基于vite+vue3+mapbox-gl从零搭建一个项目

下面是基于 Vite、Vue 3 和 Mapbox GL 从零搭建一个项目的完整步骤,包括环境搭建、依赖安装、配置和代码示例。 文章目录 1. 初始化项目2. 安装 mapbox-gl 依赖3. 配置 Mapbox Access Token4. 实现地图组件5. 在 App.vue 中使用地图组件6. 启动开发服务器7. 添加自定…

Data Filtering Network 论文阅读和理解

目录 一、TL;DR 二、Introduction 2.1 apple的结论 2.2 业界做法: 2.3 我们的做法(Apple) 2.4 如何获取好的DFN 三、未完待续(这周出去购物了,下周继续补充) 一、TL;DR 核心…

ingress-nginx代理tcp使其能外部访问mysql

一、helm部署mysql主从复制 helm repo add bitnami https://charts.bitnami.com/bitnami helm repo updatehelm pull bitnami/mysql 解压后编辑values.yaml文件,修改如下(storageclass已设置默认类) 117 ## param architecture MySQL archit…

浅谈安科瑞电能质量监测和治理产品在分布式光伏电站的应用-安科瑞 蒋静

1 概述 随着对可再生能源需求的增加,分布式光伏电站的建设和发展迅速。然而,分布式光伏电站的运行过程中面临着一系列问题,比如导致企业关口计量点功率因数过低、谐波污染等。这些问题不仅影响光伏电站自身的运行效率,还会对企业…

CSS实现实现票据效果 mask与切图方式

一、“切图”的局限性 传统的“切图”简单暴力,但往往缺少适应性。 适应性一般有两种,一是尺寸自适应,二是颜色可以自定义。 举个例子,有这样一个优惠券样式 关于这类样式实现技巧,之前在这篇文章中有详细介绍: CSS 实现优惠券的技巧 不过这里略微不一样的地方是,两个…

ToDesk云电脑、顺网云、网易云、易腾云、极云普惠云横测对比:探寻电竞最佳拍档

一、云电脑:电竞新宠崛起 在电竞游戏不断发展的今天,硬件性能成为了决定游戏体验的关键因素。为了追求极致的游戏画面与流畅度,玩家们往往需要投入大量资金购置高性能电脑。然而,云电脑技术的出现,为玩家们提供了一种…

Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放

Kotlin Bytedeco OpenCV 图像图像50 仿射变换 图像缩放 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…

回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测

效果一览 基本介绍 回归预测 | MATLAB基于TCN-BiGRU时间卷积神经网络结合双向门控循环单元多输入单输出回归预测 一、引言 1.1、研究背景及意义 在当今数据驱动的时代,时间序列预测已成为金融、气象、工业控制等多个领域的关键技术。随着人工智能和机器学习技术的…

TMC2208替代A4988

前言 TMC2208 是一款先进的 1 轴步进驱动器,支持 stealthChop ™和 256 微步。本应用说明介绍了如何设置 TMC2208 以替代 A4988(传统模式)。 引脚比较 与其他电机驱动器相比,TMC2208 具有附加功能:256 微步。 自动…

多层 RNN原理以及实现

数学原理 多层 RNN 的核心思想是堆叠多个 RNN 层,每一层的输出作为下一层的输入,从而逐层提取更高层次的抽象特征。 1. 单层 RNN 的数学表示 首先,单层 RNN 的计算过程如下。对于一个时间步 t t t,单层 RNN 的隐藏状态 h t h_t…

数据结构——AVL树的实现

Hello,大家好,这一篇博客我们来讲解一下数据结构中的AVL树这一部分的内容,AVL树属于是数据结构的一部分,顾名思义,AVL树是一棵特殊的搜索二叉树,我们接下来要讲的这篇博客是建立在了解搜索二叉树这个知识点…

【日志篇】(7.6) ❀ 01. 在macOS下刷新FortiAnalyzer固件 ❀ FortiAnalyzer 日志分析

【简介】FortiAnalyzer 是 Fortinet Security Fabric 安全架构的基础,提供集中日志记录和分析,以及端到端可见性。因此,分析师可以更有效地管理安全状态,将安全流程自动化,并快速响应威胁。具有分析和自动化功能的集成…

【KOA框架】koa框架基础及swagger接口文档搭建

koa是express的一层封装,语法比express更加简洁。所以有必要了解下koa的相关开发方法。 代码实现 package.json {"name": "koapp","version": "1.0.0","main": "index.js","scripts": {…

[深度学习]机器学习和深度学习

机器学习和深度学习 文章目录 机器学习和深度学习人工智能与机器学习和深度学习的关系侠义的机器学习深度学习的概念常见的神经网络的输入形式想要的输出(任务类别)深度学习的流程 线性函数与多层神经元 人工智能与机器学习和深度学习的关系 所谓人工智能就是,让计算…

【QT】已解决:Qt4.11.0无法使用MSVC编译器问题

目录 一、背景 1.本机环境 2.问题描述 3.问题解决前后对比图 二、详细操作 1.下载项目二所需qt环境 2.解决思路 3.安装VS2017 4.安装MSVC调试器 5.打开qtCreator查看编译器 5.编译运行项目二 三、参考 一、背景 1.本机环境 windows11 qtCreator4.11.0 minGW 64位…

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…