第一天,PyTorch张量的运算

news2024/11/15 5:00:16

文章目录

  • 一、说明
  • 二、张量的常用运算
    • 1. 索引和切片(与numpy类似)
    • 2. 通过`torch.cat`来进行连接张量
    • 3. 矩阵运算和算数运算
      • 1. 在PyTorch中`mul`与`matmul`和`@`的区别
      • 2. 矩阵运算和算数运算的示例
    • 4. 聚合张量中的所有值
    • 5. 给所有元组增加1,使用add_,同理的还有其他的
  • 三,张量的计算

一、说明

张量运算,包括算术、线性代数、矩阵运算(转置、索引、切片)、采样等。这些操作中的每一个都可以在 GPU 上运行(速度通常高于 CPU),默认情况下,张量是在 CPU 上创建的。我们需要使用方法将张量显式移动到 GPU .to(在检查 GPU 可用性之后)。注意的是:跨设备复制大型张量在时间和内存方面可能会很昂贵!

例如:

# We move our tensor to the GPU if available
if torch.cuda.is_available():
    tensor = tensor.to("cuda")
  1. 实现神经网络:神经网络是深度学习的核心,它是由多个层组成的,每一层都包含了一些张量的运算。在神经网络中,张量的运算被广泛应用于计算输入和输出之间的权重、偏差、激活函数等。

  2. 数据处理:在深度学习中,我们通常需要对数据进行预处理和转换。例如,图像分类任务中,我们需要将原始图像转换为张量并进行归一化操作。这些操作通常都涉及到对张量进行各种运算,如平均值计算、标准差计算、数据增强等。

  3. 特征提取:特征提取是深度学习中另一个重要的应用场景。在这个过程中,我们需要使用卷积运算从原始数据中提取出关键特征。卷积运算可以用于图像识别、语音识别等领域,它可以帮助我们从原始数据中提取出最有价值的信息。

  4. 模型评估:在深度学习中,我们通常需要对模型进行评估,以确定其性能如何。为此,我们需要使用各种张量的运算来计算模型的精度、召回率、F1得分等指标。

二、张量的常用运算

1. 索引和切片(与numpy类似)

例如:

tensor = torch.ones((4,4))
print(f"第一行数据: {tensor[0]}")
print(f"第一列数据: {tensor[:, 0]}")
print(f"最后一列数据: {tensor[..., -1]}")

tensor[:,1] = 0
print(f"整列赋值:{tensor}")

在这里插入图片描述

2. 通过torch.cat来进行连接张量

torch.cat()函数在二维数据和三维数据上的详细说明

例如:

#接上面的张量设置
t = torch.cat([tensor,tensor,tensor],dim=1)
print('拼接结果:',t)

在这里插入图片描述

3. 矩阵运算和算数运算

1. 在PyTorch中mulmatmul@的区别

  1. mul是逐元素相乘。当两个张量具有相同的形状时,使用mul对这两个张量进行逐元素相乘。例如,如果有一个大小为3x3的张量a和另一个大小也为3x3的张量b,则使用a.mul(b)将得到一个大小为3x3的张量,其中每个元素都是a和b对应位置上的元素相乘得到的结果。

mul的例子:

import torch

a = torch.tensor([[1, 2], [3, 4]])
b = torch.tensor([[5, 6], [7, 8]])

result = a.mul(b)
print(result)
  1. matmul是矩阵相乘。当两个张量不具有相同的形状时,我们使用matmul函数执行矩阵相乘。例如,如果有一个大小为3x4的张量a和另一个大小为4x5的张量b,则使用matmul(a, b)将得到一个大小为3x5的张量,其中每个元素都是a和b矩阵相乘后得到的结果。
import torch

a = torch.tensor([[1, 2], [3, 4], [5, 6]])
b = torch.tensor([[7, 8], [9, 10]])

result = torch.matmul(a, b)
print(result)
  1. @符号是矩阵相乘的简写形式。与matmul函数类似,@符号也用于执行矩阵相乘的操作。可以使用x @ y或者torch.matmul(x, y)来计算两个张量的矩阵乘积。例如,如果有一个大小为3x4的张量a和另一个大小为4x5的张量b,则使用a @ b或者torch.matmul(a, b)将得到一个大小为3x5的张量,其中每个元素都是a和b矩阵相乘后得到的结果。
import torch

a = torch.tensor([[1, 2], [3, 4], [5, 6]])
b = torch.tensor([[7, 8], [9, 10]])

result = a @ b
print(result)

2. 矩阵运算和算数运算的示例

  1. 矩阵运算
tensor_d = torch.tensor(np.array([
    [3.,6.,8.,7.],
    [9.,8.,5.,6.],
    [5.,2.,1.,7.]
]))
print('tensor_d:',tensor_d)
tensor_d_T = tensor_d.matmul(tensor_d.T)
print('tensor_d_T:',tensor_d_T)

y1 = tensor_d @ tensor_d.T
print('矩阵转置结果:',y1)
y3 = torch.rand_like(y1)
y2 = torch.matmul(tensor_d,tensor_d.T,out=y3)
print('矩阵相乘结果:',y2)

在这里插入图片描述

  1. 乘法运算
tensor_e = torch.tensor(np.array([
    [3.,6.,8.,7.],
    [9.,8.,5.,6.],
    [5.,2.,1.,7.]
]))
z1 = tensor_e * tensor_e
print('z1运算结果:',z1)
z2 = tensor_e.mul(tensor_e)
print('z2运算结果:',z2)
z3 = torch.rand_like(tensor_e)
z4 = torch.mul(tensor_e, tensor_e, out=z3)
print('z4运算结果:',z4)

在这里插入图片描述

4. 聚合张量中的所有值

agg = tensor.sum()
print('agg:',agg)

在这里插入图片描述

agg_item = agg.item() #将其转换为 Python 数值
print(agg_item, type(agg_item))

在这里插入图片描述

5. 给所有元组增加1,使用add_,同理的还有其他的

print(f"{tensor} \n")
tensor.add_(1)
print(tensor)

add_()是一个in-place方法,它将张量中所有元素都加上1,并直接改变了原始张量的值。这意味着,当我们执行a.add_(1)时,张量a中的每个元素都会增加1,而不会创建新的变量。这种方法可用于更新权重、偏差等参数,以及执行其他需要直接改变张量的操作。

需要注意的是,in-place操作往往具有副作用,可能会导致难以预测的结果。因此,在使用in-place方法时,一定要确保自己清楚地知道这种方法的影响,并且仅在必要时使用它们。

三,张量的计算

更为全面的阅读

涵盖一百多种张量运算

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

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

相关文章

Chrome 开发者调试常用工具

Chrome调试工具介绍 ①②③④⑤⑥⑦⑧⑨⑩ 一、Elements-元素 选项说明 styles filter搜索框:查找过滤样式, 包括class名当前选中的元素 查看其伪类效果已经样式给当前选中元素添加class名可以把当前元素class名或者id, 按照css层级添加一…

C语言:获得月份天数(多组输入)

题目: 描述 KiKi想获得某年某月有多少天,请帮他编程实现。输入年份和月份,计算这一年这个月有多少天。 输入描述: 多组输入,一行有两个整数,分别表示年份和月份,用空格分隔。 输出描述&#xff…

chatgpt赋能python:Python整除判断——一个不可缺少的技能

Python整除判断——一个不可缺少的技能 Python是一门广泛应用于科学计算、人工智能等多个领域的编程语言。在Python中,整除判断是一个非常基础但却不可或缺的技能。本篇文章将从基础开始介绍如何判断是否整除,以及如何在实际应用中使用整除判断。 整除…

PB9与Navicat Premium 16同时连接Oracle11g的连接问题

PB9与Navicat Premium 16同时连接Oracle11g的连接问题。 电脑安装的是win64_11gR2_database就是64的。 Navicat Premium 16其实是等oracle安装好后直接就能连了毫无问题。 pb9呢。因为需要32驱动的oci.dll,所以需要下载instantclient-basic-win32-11.1.0.7.0解压…

第七章 MobileNetv2网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

【C++篇】动态分配内存

友情链接:C/C系列系统学习目录 知识点内容正确性以C Primer(中文版第五版)、C Primer Plus(中文版第六版)为标准,同时参考其它各类书籍、优质文章等,总结归纳出个人认为较有逻辑的整体框架&…

EBU5476 Microprocessor System Design 知识点总结_6 Timer

Timer 想让程序定时运行,比如led 1s闪烁一次。如何做到? 第一种方法是愚蠢的delay延时,我自己估算一下:嗯,delay(2000)差不多1s。然后在程序中delay,点亮,delay,熄灭…… 太浪费资…

【C++篇】友元、运算符重载与多态

友情链接:C/C系列系统学习目录 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的…

【滤波】粒子滤波

%matplotlib inline#format the book import book_format book_format.set_style()动机 现在的问题是:我们要跟踪移动中的物体,也许这些物体是战斗机和导弹,或者是在场地里打球的人。但这都没有太大差别。那么,我们所学的滤波器中…

数据发布到WordPress网站,变为已计划、定时或Scheduled

采集数据发布到WordPress网站,但数据没有在前端页面显示,在wordpress后台查看变为已计划、定时或Scheduled。 这个是由于发布的时间变成未来时间导致的,先核实下设置的发布时间是否正确。 如果正确,那就是时区的问题导致时间变成…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(六)

今天开始使用 vue3 ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行&…

翻过那座山——Gitlab流水线任务疑难之编译有子模块的项目指南

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不是…

【C/C++】详解 类和对象的概念、基本用法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

2023-01-31 LightDB Agent安装.md

LightDB Agent安装 简介 LightDB Enterprise Manager(即 LightDB数据库监控管理平台&#xff0c;下文均简称为LightDB EM)是一个综合性的数据库监控和管理系统&#xff0c; 旨在满足数据库用户的需求&#xff0c;提供强大的图形界面&#xff0c;简化了对LightDB数据库的维护和使…

<C语言> 函数与递归

函数 1.函数的分类 库函数自定义函数 1.1 库函数 C语言提供了许多库函数&#xff08;library functions&#xff09;来简化开发过程并提供常用功能的实现。库函数是预先编写好的函数&#xff0c;可以通过调用这些函数来执行特定的任务。 为什么会有库函数&#xff1f; ​…

Docker中为RabbitMQ安装rabbitmq_delayed_message_exchange插件

Docker中为RabbitMQ安装rabbitmq_delayed_message_exchange插件 1、前言1、下载插件2、拷贝插件到RabbitMQ容器3、启用插件 1、前言 rabbitmq_delayed_message_exchange是一款向RabbitMQ添加延迟消息传递&#xff08;或计划消息传递&#xff09;的插件。 插件下载地址&#x…

Java Web框架对比:选择适合你的项目

导言 选择合适的Java Web框架是开发成功的关键之一。本文将详细对比几个常见的Java Web框架&#xff0c;包括Spring MVC、JavaServer Faces (JSF)、Struts、Play Framework、Apache Wicket和Vaadin&#xff0c;并分析它们的特点、优缺点&#xff0c;以帮助您做出明智的选择。 …

IP笔记全部整合(参考)

高级网络工程师 HCIA回顾1、网络基础2、动态路由协议3、路由认证4、路由控制&#xff08;AD metric &#xff09; 一、知识巩固二、场景模拟1、获取IP地址1.1 DHCP --- 动态主机配置协议1.1.1 DHCP客户端1.1.2 DHCP服务器1.1.3 DHCP客户端1.1.4 DHCP服务器 2、打开浏览器3、路由…

C语言全章总结

数据类型 ​ 用不同数据类型所定义的变量所占空间大小不一样&#xff0c;定义的变量不是保存于数据类型中&#xff0c;而是因为只有定义了该数据类型的变量才能保存数据。 一、整型 1、整型&#xff08;int&#xff09; 四字节&#xff0c;默认有符号&#xff08;-231-231-1…

Spark中python和jvm的通信杂谈--ArrowConverter

背景 要提起ArrowConverters&#xff0c;就得说起Arrow这个项目&#xff0c;该项目的初衷是加速进程间的数据交换&#xff0c;从目前的社区发展以及它的周边来看&#xff0c;其实是一个很不错的项目。 那为什么Spark要引入Arrow呢&#xff1f;其实还得从Pyspark中python和jvm的…