Pytorch学习笔记-(三)张量
1.Pytorch学习笔记-(一)基础入门2.Pytorch学习笔记-(二)搭建Pytorch环境(Pytorch2.1+CUDA12.1+Anaconda3_2023+Pycharm2023)3.YoloV5_RuntimeError: CUDA out of memory. Tried to allocate 100.00 MiB (GPU 0; 2.00 GiB total capacity; 1.15 GiB already allocated; 0 bytes free; 1.19 GiB reserved in total by PyTorch)
4.Pytorch学习笔记-(三)张量
1、张量支持的数据类型
(1)获取/设置Pytorch默认的张量类型
import torch
# 2、张量Tensor
# 2.1.1、获取Pytorch的默认类型
def DefaultType_func():
dtype=torch.tensor([1,2,3.4]).dtype
print("张量Tensor的默认类型为:",dtype)
print("")
# 2.1.2、设置Pytorch的默认类型
def SetDefaultType_func():
torch.set_default_dtype(torch.float32)
print("张量Tensor的默认类型被设置为:torch.float32")
2、张量生成
# 2.2、生成张量
def CreateTensor_Test():
print("方式一(需要赋值):")
A=torch.tensor([1, 2])
print("A大小为:",A.size())
print("A的维度为:",A.shape)
print("A中的元素个数为:",A.numel())
A2 = torch.tensor([1, 2],dtype=torch.float32,requires_grad=True) #使用requires_grad来启用“可计算每个元素的梯度” 注:只有浮点型可以计算梯度。
print("方式二(赋值或指定大小):")
B=torch.Tensor([3, 4]) #获取大小、维度的方法同上
B2 = torch.Tensor(2,3) # 生成一张2*3大小的张量
print("方式三(指定大小或赋值):")
# 其他方法
torch.zeros(3,3) # 3*3的全0张量
torch.ones(3, 3) # 3*3的全1张量
torch.eye(3, 3) # 3*3的单位张量
torch.full((3, 3),fill_value=0.25) # 3*3的张量,并全都填充0.25
torch.empty(3, 3) # 3*3的空张量
print("方式四(其他方式):")
torch.arange(start=0,end=10,step=2) # 使用torch.arange()生成指定步长的张量;start开始位置,end结束位置,step步长
torch.linspace(start=1, end=10, steps=5) # 使用torch.linspace()生成等间距的张量;start开始位置,end结束位置,steps元素个数
torch.logspace(start=0.1, end=1, steps=5) # 使用torch.logspace()生成以对数为间距的张量;start开始位置,end结束位置,steps元素个数
# 随机生成张量的元素的值
torch.manual_seed(123) # ①设置随机数种子
C1=torch.rand(3,4) # ②随机生成一个3*4的张量
C2 = torch.randperm(10) # ②随机生成一个的张量,元素值在0-10间随机生成
print("随机值张量C1:",C1)
print("随机值(0~10)张量C2:",C2)
# **_like()系列方法-复制张量维度
B3 = torch.ones_like(B2) # 生成一张与B2维度相同的全1的张量
B4 = torch.zeros_like(B2) # 生成一张与B2维度相同的全0的张量
B5 = torch.rand_like(B2) # 生成一张与B2维度相同的随机张量
# new_**()系列方法-复制张量类型
B3 = B2.new_full((3,3),fill_value=1) # 生成一张与B2类型相似但尺寸不同的张量,并所有元素赋值为1
B4 = B2.new_empty((3,3)) # 生成一张与B2类型相似但尺寸不同的的空张量
B5 = B2.new_zeros((3,3)) # 生成一张与B2类型相似但尺寸不同的的全0的张量
B5 = B2.new_ones((3,3)) # 生成一张与B2类型相似但尺寸不同的的全1的张量
print("")
3、张量操作
(1)类型转化-张量类型间转化
# 2.3.1、类型转化示例
def TypeConvert_Test():
# 类型转化 - 张量类型间转化
a=torch.tensor([1.1,2.2])
print("a.dtype:",a.dtype)
print("a.long()方法:", a.long().dtype)
print("a.float()方法:", a.float().dtype)
print("a.int()方法:", a.int().dtype)
torch.set_default_dtype(torch.float32)
print("")
(2)类型转化-张量与NumPy类型
# 2.3.1、类型转化示例
def TypeConvert_Test():
# 类型转化 - 张量与NumPy类型
# NumPy->张量
numPy1=np.ones((3,3))
print("方式一:")
tensor1=torch.from_numpy(numPy1)
print("tensor1:",tensor1)
print("方式二:")
tensor2=torch.as_tensor(numPy1)
print("tensor2:",tensor2)
# 张量->NumPy
numPy2=tensor2.numpy()
print("numPy2:",numPy2)
(3)改变张量的形状
# 2.3.2、改变张量的形状
def ChangeShape_Test():
#2.3.2.1、 改变形状
# 通过reshape()设置形状,range用于生成指定步长的张量;12->3*4
A=torch.arange(12.0).reshape(3,4) # 写法一
print("A:",A)
torch.reshape(input=A,shape=(2,-1)) # 写法二
print("A:",A)
#torch.resize_方法改变形状
A.resize_(2,5)
print("A:",A)
# 将A的形状设置为与B相同的形状 resize_as_
B=torch.arange(10.0,22.0).reshape(2,6)
A.resize_as_(B)
print("B:",B)
print("A:", A)
#2.3.2.2、 拓展维度
AAA=torch.arange(3)
BBB=AAA.expand(3,-1) # 指定拓展为的形状
print("BBB:",BBB)
CCC=torch.arange(6).reshape(2,3)
DDD=AAA.expand_as(CCC) # 将A的形状拓展为C的形状 expand_as
print("DDD:",DDD)
F=A.repeat(1,2,2) # 使用.repeat()方法按照指定的形状进行重复填充
print("F:",F)
print("F维度为:",F.shape)
#2.3.2.3、 升维torch.unsqueeze()与降维torch.squeeze()
AA=torch.arange(12.0).reshape(2,6)
BB=torch.unsqueeze(AA,dim=0) # 升维-写法一
print("BB维度为:",BB.shape)
CC=BB.unsqueeze(dim=3) # 升维-写法二
print("CC维度为:",CC.shape)
DD=torch.squeeze(CC,dim=0) # 降维-写法一
print("DD维度为:",DD.shape)
F=DD.squeeze(dim=2) # 降维-写法二
print("F:", F)
print("F维度为:",F.shape)
print("")
(4)获取张量中的元素
(5)拼接与拆分
4、张量计算
本文来自博客园,作者:꧁执笔小白꧂,转载请注明原文链接:https://www.cnblogs.com/qq2806933146xiaobai/p/17773614.html
合集:
Pytorch深度学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
2022-10-18 个人简介(目录)
2022-10-18 C#-比较两个List是否相同_SequenceEqual
2022-10-18 C#-SQLHelper(目录)_ADO.NET(关系型、非关系型、时序数据库)