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.mzph.cn/news/893174.shtml

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

相关文章

国产编辑器EverEdit - 合并行

1 合并行 1.1 应用场景 在编写代码或其他场景下,有时需要把多行的内容缩减成一行,或者纯粹减少行数进行合并,比如:下面的字典的定义,每个元素占了一行,有点浪费,现在需要把它们缩减行数。 typ…

3 前端(中):JavaScript

文章目录 前言:JavaScript简介一、ECMAscript(JavaScript基本语法)1 JavaScript与html结合方式(快速入门)2 基本知识(1)JavaScript注释(和Java注释一样)(2&am…

RIME-CNN-LSTM-Attention多变量多步时序预测Matlab实现

SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测 目录 SCI一区级 | Matlab实现RIME-CNN-LSTM-Multihead-Attention多变量多步时序预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现RIME-CNN-LSTM-Multihead-Attention霜冰算法…

一文读懂服务器的HBA卡

什么是 HBA 卡 HBA 卡,全称主机总线适配器(Host Bus Adapter) ,是服务器与存储装置间的关键纽带,承担着输入 / 输出(I/O)处理及物理连接的重任。作为一种电路板或集成电路适配器,HBA…

mfc操作json示例

首先下载cJSON,加入项目; 构建工程,如果出现, fatal error C1010: unexpected end of file while looking for precompiled head 在cJSON.c文件的头部加入#include "stdafx.h"; 看情况,可能是加到.h或者是.cpp文件的头部,它如果有包含头文件, #include &…

综述:大语言模型在机器人导航中的最新进展!

简介 机器人导航是指机器人能够在环境中自主移动和定位的能力。本文系统地回顾了基于大语言模型(LLMs)的机器人导航研究,将其分为感知、规划、控制、交互和协调等方面。具体来说,机器人导航通常被视为一个几何映射和规划问题&…

owasp SQL 注入-03 (原理)

1: 先看一下注入界面: 点submit 后,可以看到有语法报错,说明已经起作用了: 报如下的错误: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near at line 1 2:…

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

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

Linux(NFS服务)

赛题拓扑: 题目: NFS: 共享/webdata/目录。用于存储AppSrv主机的WEB数据。仅允许AppSrv主机访问该共享。 [rootstoragesrv ~]# yum install nfs-utils -y [rootstoragesrv ~]# mkdir /webdata [rootstoragesrv ~]# chmod -R ow /webdata …

c.p.api.config.MyAuthenticationProvider

文章目录 1、URL1、AdminController3、AuthenticationProvider 2025-01-15 14:21:31.017 WARN 1972 --- [nio-8087-exec-8] c.p.api.config.MyAuthenticationProvider : 管理员:13524972741 登录失败:密码错误解释: 时间戳: 2025-01-15 14:21:31.017 - 表示日志记录的时间…

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

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

设置 Git 默认推送不需要输入账号和密码【Ubuntu、SSH】

如何设置 Git 默认推送不需要输入账号和密码 在使用 Git 管理代码时,许多开发者会遇到每次推送(push)或拉取(fetch)代码时都需要输入 GitHub 或 GitLab 等远程仓库的账号和密码的情况。虽然设置了用户名和电子邮件信息…

【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法

文章目录 一、总览工具二、放大镜工具三、查看器工具ArcGIS中提供了三种局部查看的工具: 总览(鹰眼)、放大镜、查看器,如下图所示,本文讲述这三种工具的使用方法。 一、总览工具 为了便于效果查看与比对,本实验采用全球影像数据(位于配套实验数据包中的0140.rar中),加…

Vue3数据响应式原理

什么是数据响应式 当数据变化时,引用数据的函数(副作用函数)自动重新执行。 即数据触发了函数的响应,如:视图渲染中使用了某数据,数据改变后,视图跟着自动更新。 触发者:数据 响应者…

机器学习06-正则化

机器学习06-正则化 文章目录 机器学习06-正则化0-核心逻辑脉络1-参考网址3-大模型训练中的正则化1.正则化的定义与作用2.常见的正则化方法及其应用场景2.1 L1正则化(Lasso)2.2 L2正则化(Ridge)2.3 弹性网络正则化(Elas…

springboot学生成绩管理系统

Spring Boot学生成绩管理系统是一个基于Spring Boot框架开发的,旨在帮助教育机构、学校或教师高效管理学生成绩的系统。 一、系统背景与意义 在教育领域,学生成绩的管理是一项重要且繁琐的工作。传统的手工管理方式不仅效率低下,还容易出错…

13软考高项,项目资源管理

团队章程:价值观,沟通指南,决策标准和过程,冲突处理过程,会议指南和团队共识! 资源管理计划:识别资源,获取资源,角色,组织图,培训,团…

Spring AI入门示例HelloWorld

本文重点介绍,基于Spring AI框架,并使用阿里百炼大模型服务平台的AI服务,快速搭建一个springboot工程,并进行简单的AI问答,初步验证Spring AI框架的易用性,以及与阿里巴巴AI框架spring-ai-alibaba-starter的…

git系列之revert回滚

1. Git 使用cherry-pick“摘樱桃” step 1: 本地切到远程分支,对齐要对齐的base分支,举例子 localmap git pull git reset --hard localmap 对应的commit idstep 2: 执行cherry-pick命令 git cherry-pick abc123这样就会将远程…

【C++】结构体(上)

1、结构体基本概念 结构体属于用户自定义当代数据类型,允许用户存储不同当代数据类型 2、结构体定义和使用 语法: struct 结构体名 { 结构体成员列表 }; 通过结构体创建变量的方式有三种: (1)struc…