Tensors张量操作


定义Tensor

下面是一个常见的tensor,包含了里面的数值,属性,以及存储位置

tensor([[0.3565,0.1826,0.6719],
        [0.6695,0.5364,0.7057]],dtype=torch.float32,device='cuda:0')

Tensor的属性

Tensor属性描述了它们的形状、数据类型和存储它们的设备(CPU 或 GPU)

import torch
tensor = torch.rand( 3,4)
print(f"shape of tensor: {tensor. shape}")
print(f"Datatype of tensor: {tensor.dtype}")
print(f"Device tensor is stored on: {tensor. device}")

Shape of tensor: torch.size([3,4])

Datatype of tensor: torch.float32

Device tensor is stored on: cpu

Tensor存储的数值

Tensor 可以用多种方法进行初始化。

直接传数据

Tensor可以直接从数据进行创建,数据类型会自动适应。

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

tensor([[1,2],
        [3,4]])

使用Numpy数据

可以通过Numpy矩阵中进行创建

import torch
import numpy as np
np_array = np. array ([[1,2],
                       [3,4]])
x_np = torch.from_numpy ( np_array)
print(x_np)
利用已有tensor

根据已有的数据形式(形状,数据类型),创建出新的tensor

data = [[1,2],[3,4]]
x_data = torch.tensor(data)
# 保持了x_data的数据属性与形状
x_ones = torch.ones_like(x_data)
print(f"ones Tensor: \n {x_ones} \n")
# 保持形状不变但改变数据属性的新张量
x_rand = torch.rand_like(x_data,dtype=torch.float)
print(f"Random Tensor: \n {x_rand} \n")

Tensor存储的位置

Tensor可以保存在GPU中,或者保存在CPU中,在二者中可以进行切换

  1. GPU中进行运算(前向传播、反向传播)
  2. CPU中进行数据读取(从内存读取数据)与写入(保存到硬盘中)

CPU->GPU 

import torch
shape = (2, 3, )
rand_tensor = torch.rand( shape)
print(rand_tensor)
if torch.cuda.is_available( ) :
    rand_tensor = rand_tensor.cuda()
print(rand_tensor)

输出:

tensor([[e.3565,0.1826,0.6719],
        [e.6695,0.5364,0.7057]])
tensor([[e.3565,0.1826,0.6719],
        [e.6695,0.5364,0.7057]],device= 'cuda:e ')

GPU->CPU

shape = (2, 3,)
rand_tensor = torch.rand( shape)
print(rand_tensor)
if torch.cuda.is_available( ):
    rand_tensor = rand_tensor.cuda()
print( rand_tensor)
cpu_tensor = rand _tensor.cpu()
print(cpu_tensor)

使用to()自动进行切换张量存储位置:

这个方法非常灵活,可以自动处理类型转换和设备迁移。

device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')  
# 检查并设置设备
x_cpu = torch.tensor([[1., 2.], [3., 4.]])  
# 在CPU上的张量
x_gpu = x_cpu.to(device)  
# 移动到GPU

数据的运算

这些操作中的每一个都可以在GPU上运行(通常比在CPU上运行的速度更快)。

tensor = torch.tensor([[1,2],
                       [ 3,4]])
#矩阵乘法
result_1 = tensor @ tensor
print( result_1)
print("矩阵乘法,result_1 = \n", result_1)
#矩阵对应位置的元素相乘
result_2 = tensor *tensor
print("元素乘法,result_2 = \n", result_2)
result_3 = tensor + tensor
print("元素加法,result_3 = \n" , result_3)
agg = tensor.sum( )
agg_item = agg.item()#使用item()获取里面的值
print("求和,agg_item = " , agg_item,type( agg_item) )

在PyTorch中,当你想要从一个标量张量(即形状为(1,)或者空的张量)中提取出Python的原生数值(例如整数、浮点数)时,可以使用.item()方法。这个方法会返回张量中的数据,将其转换为Python的基本数据类型。

import torch

# 一个包含单个浮点数的张量
tensor_with_one_value = torch.tensor([3.5])

# 使用.item()方法提取该值
value = tensor_with_one_value.item()

print(value)  # 输出: 3.5

Tensor的拼接

将两个或者多个tensor进行拼接(concat),使用 torch.cat对tensor沿着一个特定的维度进行拼接。

tensor_1 = torch.tensor([[1,2,3,4]])
tensor_2 = torch.tensor([[5,6,7,8]])
print(torch.cat([tensor_1,tensor_2],dim=0))
print(torch.cat([tensor_1,tensor_2],dim=1))

我们平时的张量有两个维度↓和→:

↓就是0维度,→就是1维度。 

tensor([[1,2,3,4],
        [5,6,7,8]])
tensor([[1,2,3,4,5, 6,7,8]])

数据的转换

NumpyTensor

import torch
import numpy as np
n=np.ones ( 5)
t = torch.from_numpy(n)

# 
[1. 1.1.1. 1.]
tensor([1., 1., 1., 1., 1.],dtype=torch.float64)

TensorNumpy

t = torch. ones ( 5)
n= t.numpy ()

图片转Tensor

from PIL import Image
from torchvision import transforms
image_path = r'image.png'
image = Image.open(image_path)
transform = transforms.ToTensor()
tensor_image = transform( image)
print(type(tensor_image) )

# <class 'torch . Tensor' >

Tensor转图片

import torch
from torchvision import transforms
tensor_image = torch.randn( ( 3,224,224))
transformed_image = transforms.ToPILImage( )(tensor_image)
save_path = r "form_tensor .jpg'
#保存图像
transformed_image.save( save_path)

transforms模块是torchvision库中的一个重要组成部分,它提供了一系列预定义的图像转换方法,用于对图像数据进行各种预处理,如裁剪、缩放、旋转、归一化等,以便于输入深度学习模型进行训练或测试。

比如ToTensor:将PIL Image或numpy.ndarray转换为torch.FloatTensor,范围从[0, 255]变为[0.0, 1.0]。 

比如Normalize:对图像像素值进行归一化处理,常用于使数据分布更加一致,加速模型收敛。

transform = transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])

PyTorch处理图片案例

模拟从硬盘读取一张图片,使用pytorch在显卡上进行运算,随后把运算结果保存到硬盘

import torch
from torchvision import transforms
from PIL import Image
image_path = r"image.png"
save_path = r"result.png"
#加载图片
image = Image.open( image_path)

transform = transforms. ToTensor()
#应用转换
tensor_image = transform( image)
print(tensor_image)
#检查CuDA是否可用并将tensor移至CUDA
if torch.cuda.is_available( ) :
    tensor_image = tensor_image.to( ' cuda ')
# 对每个元素加一
tensor_image += 0.1
# 将tensor移回CPU并转换回PIL图像
tensor_image = tensor_image.to( ' cpu ')
transformed_image = transforms.ToPILImage()(tensor_image)
#保存图像
transformed_image.save( save_path)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】零基础解决路径问题(C++)

目录 62.路径问题 解法&#xff08;动态规划&#xff09;&#xff1a; 1. 状态表⽰&#xff1a; 2. 状态转移⽅程&#xff1a; 3. 初始化&#xff1a; 4. 填表顺序&#xff1a; 5. 返回值&#xff1a; 不同路径2.0 解法&#xff08;动态规划&#xff09;&#xff1a; …

LLM中的RoPE位置编码代码解析与RoPE的性质分析(一)

本博客需要对位置编码有一定了解&#xff0c;但不熟悉代码实现的老哥看。 正弦位置编码&#xff08;sinusoidal&#xff09; 在介绍RoPE之前&#xff0c;先回顾一下正弦位置编码。 数学表达 P E ( p o s , 2 i ) s i n ( p o s 1000 0 2 i / d m o d e l ) PE(pos, 2i) sin…

行转列——kettle开发14

一、行转列 如图所示&#xff0c;行转列就是把数据字段的字段名转换为一列&#xff0c;把数据行变成数据列。即我们将昨天输出的张三在周一至周日的工作小时转换为7行数据。对应7行数据分别为张三在周一工作多个小时&#xff0c;在周二工作多少个小时等等。 我们来看下行转列组…

怎么设置电脑锁屏密码?一键给你的电脑“上锁”

在保护个人电脑安全方面&#xff0c;设置锁屏密码是一种简单而有效的方法。无论是在家里还是在公共场所&#xff0c;锁屏密码都可以有效防止他人未经授权访问您的电脑&#xff0c;保护您的隐私和数据安全。 然而&#xff0c;对于一些新手用户来说&#xff0c;怎么设置电脑锁屏…

期货学习笔记-横盘行情学习1

横盘行情的特征及分类 横盘行情的概念 横盘行情时中继形态的一种&#xff0c;一般常出现在大涨或大跌之后出现横盘行情是对当前趋势行情的修正&#xff0c;是对市场零散筹码的清理&#xff0c;是为了集中筹码更便于后期行情的展开 横盘行情的特征 1.水平运动&#xff1a;该…

Java基础-反射原理

总结放前面&#xff1a; 反射是可以通过一个类对象或类名称获取到该类的全部信息&#xff08;属性和方法&#xff09;&#xff0c;包括为权限为private。 要使用反射第一步&#xff0c;要获取的类的Class对象&#xff0c;该Class对象存放在堆区&#xff0c;于类加载时创建&…

互联网政务应用安全管理规定:使用安全连接方式访问

前几日&#xff0c;由中央网络安全和信息化委员会办公室、中央机构编制委员会办公室、工业和信息化部、公安部等4部门联合制定的《互联网政务应用安全管理规定》&#xff08;以下简称规定&#xff09;发布了&#xff0c;规定定义了互联网政务应用&#xff0c;也对互联网政务应用…

[GDB] GDB调试

目录 一 简介 二 功能: 三 命令: 四 调试准备: 五 开始调试: 5.1 添加断点&#xff1a; 5.2 条件编译 5.3 断点查看 5.4 断点删除: 5.5 查看源码 5.6 单步调试(逐过程)&#xff1a; 5.7 断点调试: 5.8 单步跟踪(逐语句): 5.9 调试过程&#xff1a; 5.9.1 开始调…

一屏万象,场景无限:蓝牙墨水屏标签多功能多场景应用带您领略未来

在数字化浪潮汹涌澎湃的今天&#xff0c;智能科技产品层出不穷&#xff0c;它们不仅极大地改变了我们的生活方式&#xff0c;更在无形中拓宽了我们的视野。而今&#xff0c;一款融合了创新技术与实用性于一体的蓝牙墨水屏标签&#xff0c;正以其多功能多场景应用的特性&#xf…

【wiki知识库】02.wiki知识库SpringBoot后端的准备

&#x1f4dd;个人主页&#xff1a;哈__ 期待您的关注 目录 一、&#x1f525;今日目标 二、&#x1f4c2;打开SpringBoot项目 2.1 导入所需依赖 2.2修改application.yml配置文件 2.3导入MybatisPlus逆向工程工具 2.4创建一个公用的返回值 2.5创建CopyUtil工具类 2.6创建…

固定Linux的ip地址,通过图形化界面操作,简单易上手

目录 1、查看Linux的网络 2、修改设置 3、修改Windows网络设置 1、查看Linux的网络 2、修改设置 3、修改Windows网络设置 Microsoft Windows [版本 10.0.19045.3996] (c) Microsoft Corporation。保留所有权利。C:\Users\dgq>ipconfigWindows IP 配置无线局域网适配器 WLAN:…

DataGrip软件执行已将创建好的sql文件步骤

一、在需要导入sql文件上右击找到SQLScript &#xff0c;然后点击 Run SQL Script 二、找到sql文件&#xff0c;点击OK就可以了

【编译原理复习笔记】正则表达式与自动机

正则表达式 正则表达式是一种用来描述正则语言的更紧凑的表达方法 e.g. r a ( a ∣ b ) ∗ ( ϵ ∣ ( . ∣ ) ( a ∣ b ) ) ra(a|b)^*(\epsilon|(.|\\_ )(a|b)) ra(a∣b)∗(ϵ∣(.∣)​(a∣b)) 正则表达式可以由较小的正则表达式按照特定的规则递归地构建。每个正则表达式定义…

【软件设计师】程序语言

1.程序设计语言基本概念 1.1 低级语言与高级语言 低级语言&#xff1a;机器语言和汇编语言称为低级语言 机器语言指0.&#xff0c;1组成的机器指令序列 汇编语言指用符号表示指令的语言&#xff0c;如MOV AX&#xff0c;2 高级语言&#xff1a;从人类的逻辑角度出发&#xff0…

蓝卓入选工信部2023年度“揭榜挂帅”项目

蓝卓“面向多元异构和应用快速开发演化的智能工厂操作系统解决方案”&#xff0c;凭借行业领先的平台技术能力以及数智赋能的硬核实力成功揭榜挂帅。 本次入选不仅代表了蓝卓又一次获得工信部权威专家及国家认可&#xff0c;更是“工厂操作系统”首次在国家层面获得表彰。 智能…

听说京东618裁员?所以日常准备很重要呀

文末有最少必要的面试题&#xff0c;还准备了离线 PDF 版本。 京东也要向市场输送人才了? 这几天看到技术群里不少朋友在讨论京东裁员相关的信息。 我去看了下京东近期的操作&#xff0c;京东内部考勤调整和午休时间缩短&#xff0c;以及强化打卡机制等管理调整&#xff1b;有…

IDEA设置运行内存

1.开启内存指示条​​​​​​​ 查看idea右下角​​​​​​​ 2.环境变量查看ideaVM地址&#xff0c;没有的话那就是默认的配置文件&#xff1a; idea 安装 bin 目录下 idea64.exe.vmoptions 3.去对应路径修改内存参数大小 4.重启IDEA&#xff0c;end

开启Three之旅(二)射线、拾取模型、解决鼠标点击、Hover以及CSS3Renderer点击穿透问题

文章目录 射线RayRaycaster屏幕坐标 --> 设备坐标射线坐标计算&#xff08;Canvas尺寸变化&#xff09;射线拾取层级模型拾取Sprite控制场景场景一&#xff1a;用鼠标模拟hover事件场景二&#xff1a; 选中模型&#xff08;click事件&#xff09;场景三&#xff1a;处理射线…

德勤:中国、印度等对ChatGPT等生成式AI应用,处领先地位

全球四大会计事务所之一的德勤&#xff08;Deloitte&#xff09;在官网发布了一份&#xff0c;名为《Generative AI in Asia Pacific: Young employees lead as employers play catch-up》的深度调查报告。 主要查看中国、澳大利亚、印度、日本、新加坡、韩国、中国台湾等亚太…

2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟

注意开浮点数 ​​​​ import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {double t0;int cnt0;double distance1000;while(distance>1){//相撞时间tdistance/60.0;distance-t*20;cnt;}Syste…