PyTorch学习笔记之基础函数篇(二)

2.算子

2.1 如何判断一个对象是不是tensor类型

在PyTorch中,你可以使用isinstance()函数来判断一个对象是否是torch.Tensor类型。这是一个例子:

import torch

# 创建一个Tensor对象
tensor = torch.tensor([1.0, 2.0, 3.0])

# 使用isinstance()检查对象是否为Tensor类型
is_tensor = isinstance(tensor, torch.Tensor)

print(is_tensor)  # 输出: True

在上面的代码中,isinstance(tensor, torch.Tensor)将返回True,因为tensor是一个torch.Tensor对象。如果tensor不是torch.Tensor类型,isinstance()将返回False。

此外,如果你想检查一个对象是否是任何类型的Tensor(包括torch.Tensor、torch.cuda.Tensor等),你可以使用torch.is_tensor()函数:

import torch

# 创建一个Tensor对象
tensor = torch.tensor([1.0, 2.0, 3.0])

# 使用torch.is_tensor()检查对象是否为Tensor类型
is_tensor = torch.is_tensor(tensor)

print(is_tensor)  # 输出: True

torch.is_tensor()函数会返回True,如果对象是一个Tensor,无论它是哪种类型的Tensor。如果对象不是Tensor,它将返回False。

2.2 如何全局设置tensor类型

在PyTorch中,全局设置Tensor类型通常涉及到指定Tensor的默认数据类型和设备(CPU或GPU)。这可以通过设置torch.set_default_tensor_type和torch.set_default_dtype来实现。此外,为了确保Tensor在计算时能够利用GPU加速,你还需要确保你的Tensor是在正确的设备上创建的。

以下是如何全局设置Tensor类型和确保Tensor在GPU上创建的步骤:

1). 设置默认Tensor类型

你可以使用torch.set_default_tensor_type来设置默认的Tensor类型。这通常用于指定是否创建的是torch.FloatTensor、torch.DoubleTensor等。

import torch

# 设置默认的Tensor类型为浮点型Tensor
torch.set_default_tensor_type(torch.FloatTensor)

这样,当你使用torch.tensor或torch.Tensor创建Tensor时,如果不指定dtype,那么创建的Tensor将是torch.FloatTensor类型。

2). 设置默认数据类型

使用torch.set_default_dtype可以设置默认的数据类型。这允许你指定Tensor中元素的数据类型,如torch.float32、torch.float64等。

import torch

# 设置默认的数据类型为32位浮点型
torch.set_default_dtype(torch.float32)

设置默认数据类型后,当你创建Tensor时,如果不指定dtype,那么Tensor中的元素将是torch.float32类型。

3) 确保Tensor在GPU上创建

如果你有一个CUDA支持的GPU,并且已经安装了相应版本的CUDA和cuDNN,你可以使用torch.cuda.is_available()来检查是否可以使用GPU。然后,你可以使用.to(device)或.cuda()方法将Tensor移动到GPU上。

import torch

# 检查CUDA是否可用
if torch.cuda.is_available():
    device = torch.device("cuda")          # 设置设备为GPU
else:
    device = torch.device("cpu")           # 设置设备为CPU

# 创建一个Tensor并移动到指定的设备上
tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]]).to(device)

或者,你可以使用.cuda()方法将Tensor移动到GPU上(如果CUDA可用):

tensor = torch.tensor([[1.0, 2.0], [3.0, 4.0]]).cuda()

请注意,这些设置是全局的,会影响你之后创建的所有Tensor,除非你明确地改变了它们。
最后,请确保你的代码运行在支持CUDA的环境中,并且已经安装了正确版本的PyTorch和CUDA驱动。否则,尝试使用GPU可能会引发错误。

2.3 PyTorch中的Storage对象

PyTorch中的Storage对象是一个单一数据类型的连续一维数组,它是Tensor对象在内存中的存储形式
。Storage对象与Tensor对象有着紧密的联系,每个Tensor都有一个对应的、相同数据类型的Storage1。

Storage对象与Tensor对象的主要区别在于,Storage对象仅仅是一个存储数据的容器,没有Tensor对象所具有的维度和形状等属性,也不能直接进行各种运算操作。而Tensor对象则是对Storage对象进行封装,具有明确的维度和形状,并可以直接进行各种运算操作1。

下面是一个简单的例子,展示了如何创建一个Tensor对象并获取其对应的Storage对象:

import torch

# 创建一个Tensor对象
tensor = torch.tensor([[1, 2], [3, 4]], dtype=torch.float32)

# 获取Tensor对象对应的Storage对象
storage = tensor.storage()

# 打印Storage对象的内容
print(storage)

在这个例子中,我们首先创建了一个形状为(2, 2)的Tensor对象,数据类型为float32。然后,我们通过调用Tensor对象的storage()方法,获取了Tensor对象对应的Storage对象。最后,我们打印了Storage对象的内容,可以看到它是一个包含4个元素的连续一维数组,元素值为[1, 2, 3, 4]1。

未完待续…见下一篇

  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊猫Devin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值