Pytorch学习笔记day2——Tensor运算

那么今天,我们来学习一下张量运算。笔者最早接触AI还是在tensorflow的时代。张量tensor本身,可以理解成向量和矩阵的一个推广。

一维张量就是向量:A[i]
二维张量就是矩阵:A[i][j]
三维张量就是…就是三维张量…嗯总不能每个维度都起个名字吧:A[i][j][k]

张量本身有很多算子,但是一般AI里面出现的张量计算都会比较简单,加减乘除差不多了。这里贴一个torch的API网址
https://pytorch.org/docs/stable/torch.html

今天的主要目标,就是要把张量的生成,取数,基本运算都学会。最后,我们要试一试我们的CUDA是不是能用了,稍微试试看GPU到底比CPU快多少。

啊,开始之前,要感谢大自然的馈赠。今天测试用的代码,大部分是百度的AI工具生成的。
在这里插入图片描述

张量的初始化

直接贴代码

import torch
import numpy as npx = torch.empty(2, 3)       #生成空张量,元素值和运行环境相关
x = torch.rand(2, 3)         #生成随机张量
x = torch.zeros(2, 3, dtype=torch.float)   #生成全0张量
x = torch.ones(2, 3)     #生成全1张量
x = torch.eye(3,2)     #生成对角为1张量
x = torch.full((3,3), 0.25)  #生成全为指定值的张量
x = torch.arange(start=0, end=5, step=2)  #生成一定范围内的向量#生成和A尺寸相同的张量, A必须是张量否则报错
A = torch.rand(2, 3)
x = torch.ones_like(A)
x = torch.zeros_like(A)
x = torch.rand_like(A)print(A.shape)
print(A.size())
print(A.size(0))
print(A.size(1))
print(A.numel())

运行结果如下

torch.Size([2, 3])
torch.Size([2, 3])
2
3
6

实际上spyder里面打开一个tensor,是能看到里面所有的接口的。不过这些接口都是啥意思,就要慢慢熟悉和翻API手册了
在这里插入图片描述

张量的取值

矩阵运算,私以为matlab是最好用的,毕竟人家都叫mat lab了对吧。但是tensor的类似运算,也需要熟悉
推荐看看这个

直接贴代码

import torch
import numpy as npA = [[11,12,13,14],[21,22,23,24],[31,32,33,34]]
print(A)x = torch.tensor(A)
print(x)
print("="*40)# 取单个值
print(x[0][0])
print(x[0][3])
print(x[0,0])
print(x[0,3])
print("="*40)# 取某行某列
print(x[0])
print(x[:,0])
print("="*40)# 某行,列拼起来
print(x[[0,2]])
print(x[:,[1,3]])
print("="*40)# 用矩阵取数
ind2 = [[0, 1, 2],[1, 2, 3]]   # 3*4[2*3] = 3  取下标
ind3 = [[[0, 1, 2],[0, 1, 2]]]   # 3*4[1*2*3] = 2*3*4  取行
ind4 = [[[0,0],[0,0]],[[0,0],[0,0]]]  #3*4[1*2*2*2] = 2*2 取下标
ind5 = [[[[0,0],[0,0]],[[0,0],[0,0]]]]  #3*4[1*1*2*2*2] = 2*2*2*4  取行print(x[ind2].shape)
print(x[ind3].shape)
print(x[ind4].shape)
print(x[ind5].shape)print(x[ind2])
print(x[ind3])
print(x[ind4])
print(x[ind5])

结果如下,看起来在取行的下标也是张量形式时,规则会比较复杂,不过暂时不做过多探索。需要用到再考虑

[[11, 12, 13, 14], [21, 22, 23, 24], [31, 32, 33, 34]]
tensor([[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34]])
========================================
tensor(11)
tensor(14)
tensor(11)
tensor(14)
========================================
tensor([11, 12, 13, 14])
tensor([11, 21, 31])
========================================
tensor([[11, 12, 13, 14],[31, 32, 33, 34]])
tensor([[12, 14],[22, 24],[32, 34]])
========================================
torch.Size([3])
torch.Size([2, 3, 4])
torch.Size([2, 2])
torch.Size([2, 2, 2, 4])
tensor([12, 23, 34])
tensor([[[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34]],[[11, 12, 13, 14],[21, 22, 23, 24],[31, 32, 33, 34]]])
tensor([[11, 11],[11, 11]])
tensor([[[[11, 12, 13, 14],[11, 12, 13, 14]],[[11, 12, 13, 14],[11, 12, 13, 14]]],[[[11, 12, 13, 14],[11, 12, 13, 14]],[[11, 12, 13, 14],[11, 12, 13, 14]]]])

张量的基本运算

直接贴代码

import torch
import numpy as npimport torch# 创建两个tensor
a = torch.tensor([1, 2, 3, 4, 5, 6])
b = torch.tensor([7, 8, 9, 10, 11, 12])# 四则运算
c_add = a + b
c_sub = a - b
c_mul = a * b
c_div = a / bprint(c_add)
print(c_sub)
print(c_mul)
print(c_div)
print("\n")# 矩阵计算
c_mul = torch.mul(a,b)
c_matmul = torch.matmul(a,b.T)print(c_mul)
print(c_matmul)
print("\n")# 向量重新整理尺寸,元素按照右侧下标连续
d = a.view(2,3)
e = b.reshape(3,2)print(d)
print(e)
print("\n")f_mul = torch.mul(d,e.T)
f_matmul = torch.matmul(d, e)print(f_mul)
print(f_matmul)

输出结果如下

tensor([ 8, 10, 12, 14, 16, 18])
tensor([-6, -6, -6, -6, -6, -6])
tensor([ 7, 16, 27, 40, 55, 72])
tensor([0.1429, 0.2500, 0.3333, 0.4000, 0.4545, 0.5000])tensor([ 7, 16, 27, 40, 55, 72])
tensor(217)tensor([[1, 2, 3],[4, 5, 6]])
tensor([[ 7,  8],[ 9, 10],[11, 12]])tensor([[ 7, 18, 33],[32, 50, 72]])
tensor([[ 58,  64],[139, 154]])

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

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

相关文章

Hadoop3:RPC通信原理及简单案例实现

一、场景介绍 我们知道,Hadoop中存在多种服务,那么,服务之间是如何通信的了? 比如,DN和NN之间如何通信? 这里,实际上是通过RPC实现进程间通信的了。 RPC属于Java网络编程范畴 需要编写客户端和…

AV1 编码标准屏幕内容编码技术概述

AV1 屏幕内容编码 为了提高屏幕捕获内容的压缩性能,AV1采用了几种编码工具,例如用于处理屏幕画面中重复模式的内帧内块复制(IntraBC),以及用于处理颜色数量有限的屏幕块的调色板模式。 帧内块拷贝 AV1 编码中的 Intra …

代码随想录二刷复习(二分法)

二分法模板: 1:左闭右闭区间写法 第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] (这个很重要非常重要)。 区间的定义这就决定了二分法的代码应该如何写,因为定…

函数定义、合约与面向对象(以太坊solidity合约)

函数定义、合约与面向对象(以太坊solidity合约) 1-函数定义、构造与多态2-事件日志3-面向对象特征 1-函数定义、构造与多态 创建合约就是创建类,部署合约就是实例化 合约的方法还支持多态 还能使用第三方的库进行开发 整个合约部署后&…

运维管理数智化:数据与智能运维场景实践

本文来自腾讯蓝鲸智云社区用户:CanWay 摘要:笔者根据自身的技术和行业理解,分享嘉为蓝鲸数据与智能运维场景实践。 涉及关键字:一体化运维、平台化运维、数智化运维、AIOps、运维PaaS、运维工具系统、蓝鲸等。 本文作者&#xf…

自动驾驶AVM环视算法–全景和标定全功能算法实现和exe测试demo

参考:全景和标定全功能算法实现和exe测试demo-金书世界 1、测试环境 opencv310vs2022 2、使用的编程语言 c和c 3、测试的demo的获取 更新:测试的exe程序,无需解压码就可以体验算法测试效果 百度网盘: 链接:http…

minio 获取预览地址

1.进入到 minio,并设置桶的权限。 2.获取预览地址代码如下: 注意: GetPresignedObjectUrlArgs.builder().method(Method.GET),这个地方一定要用 GET,我当时按照官网的例子写的,没注意这个,搞了…

深入解析公有IP与私有IP:地址分配与使用限制

IP地址在网络基础设施的建设和维护过程中起着至关重要的作用。作为IP地址的两大类型,公有IP和私有IP各自具有独特的分配机制和使用限制。本文将详细分析两者之间的区别,以帮助读者更好地理解和使用IP地址。 1. 公有IP与私有IP概述 IP地址是网络中的唯一…

库迪“夏日果咖季”打卡活动走样,联营商不想配合了?

库迪的“夏日果咖季”打卡活动,真是让人在这个炎炎夏日受一肚子气。 有大批不同IP的网友在社交媒体平台吐槽,特意前去门店打卡,却被告知门店没有这个活动。 一位广州的网友在小红书发帖表示,上班前特意坐地铁去门店参加活动&…

半自动辅助制作数据集【实例分割】

利用yoloV8的实例分割模型,半自动辅助制作数据集 引言:【主要步骤】 步骤1:无人机航拍,收集基础图片 步骤2:将收集到的图片,全部用yoloV8-seg.pt模型进行实例分割【预测之前,将配置文件default.…

什么是大模型?(超详细)从入门到精通 一文读懂大模型的基本概念

1. 大模型的定义 大模型是指具有大规模参数和复杂计算结构的机器学习模型。这些模型通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能,能够处理更加复杂的任务和数据。大模型在各种领域都有…

海外社媒矩阵为何会被关联?如何IP隔离?

在当今的数字时代,社交媒体已经成为人们日常生活中不可或缺的一部分。通过社交媒体,人们可以与朋友互动,分享生活,甚至进行业务推广和营销。然而,社交媒体账号关联问题逐渐受到广泛关注。社交媒体账号为何会关联&#…

力扣经典题目之->删除有序数组中的重复项讲解 的讲解与实现

一:题目 二:思路讲解 第一步:创建两个下标,一个是第一个元素的(start0),一个是第二个元素的(end1) 第二步: a:end移动,直到遇到不等…

Flowable-会签与或签

一、会签 会签的意思是,在流程任务管理中,任务通常是由一个人或者多个人同时去处理的,这种任务叫做会签任务。类似于并行网关,会签任务一般需要任务候选人全部完成审批后,才能进入下一个审批环节。 (一) 会签类型 按…

持续集成06--Jenkins构建触发器

前言 在持续集成(CI)的实践中,构建触发器是自动化流程中不可或缺的一环。它决定了何时启动构建过程,从而确保代码变更能够及时地得到验证和反馈。Jenkins,作为业界领先的CI/CD工具,提供了多种构建触发器选项…

jeecgboot项目不知道什么原因启动出来8080端口后就不下去了,要等上10多分钟才出来接口地址等正常情况

因为这个项目license问题无法开源,更多技术支持与服务请加入我的知识星球。 1、项目中途不知道什么原因,就出现下面情况 具体如下: 2024-07-15 15:08:15.767 [main] [34mINFO [0;39m [36mliquibase.changelog:30[0;39m - Reading from jeec…

什么是鉴权开发框架?如何认证和限流

目录 一、鉴权开发框架介绍二、Django REST framework是什么三、如何实现认证、权限与限流功能四、Django REST framework的应用场景 一、鉴权开发框架介绍 鉴权开发框架是一种用于实现身份验证和授权的软件开发工具。它可以帮助开发者快速构建安全、可靠的身份验证和授权系统…

Spring Boot 中使用 Resilience4j 实现弹性微服务的简单了解

1. 引言 在微服务架构中,服务的弹性是非常重要的。Resilience4j 是一个轻量级的容错库,专为函数式编程设计,提供了断路器、重试、舱壁、限流器和限时器等功能。 这里不做过多演示,只是查看一下官方案例并换成maven构建相关展示&…

DNS查询过程

DNS(域名系统,Domain Name System)是一个用于将域名和IP地址相互映射的系统。当你在浏览器中输入一个网址时,浏览器会通过DNS查询过程来找到对应的IP地址,以便能够连接到目标服务器。其查询过程一般通过以下步骤&#…

Netgear WN604 downloadFile.php 信息泄露漏洞复现(CVE-2024-6646)

0x01 产品简介 NETGEAR WN604是一款由NETGEAR(网件)公司生产的无线接入器(或无线路由器)提供Wi-Fi保护协议(WPA2-PSK, WPA-PSK),以及有线等效加密(WEP)64位、128位和152位支持,保障网络安全。同时支持MAC地址认证、802.1x RADIUS以及EAP TLS、TTLS、PEAP等安全机制,…