前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PyTorch张量操作详解

PyTorch张量操作详解

作者头像
阿珍
发布2022-10-21 17:52:56
1K0
发布2022-10-21 17:52:56
举报

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天,点击查看活动详情

前言

PyTorch 建立在张量之上,PyTorch 张量是一个 n 维数组,类似于 NumPy 数组。如果对?NumPy?较为熟悉,我们会在使用张量时看到语法上的相似之处:

Numpy数组

PyTorch张量

描述

numpy.ones()

torch.ones()

创建一个全 1 数组

numpy.zeros()

torch.zeros()

创建一个全 0 数组

numpy.random.rand()

torch.rand()

创建一个随机数组

numpy.array()

torch.tensor()

使用给定值创建数组

x.shape

x.shape

获取数组形状

在本节中,我们将学习如何定义和更改张量,将张量转换为数组,以及在计算设备之间移动张量。

定义张量数据类型

默认张量数据类型是 torch.float32,这是张量运算最常用的数据类型。

1. 定义一个具有默认数据类型的张量:

代码语言:javascript
复制
x = torch.ones(2, 2)
print(x)
print(x.dtype)

2. 定义张量时指定数据类型:

代码语言:javascript
复制
x = torch.ones(2, 2, dtype=torch.int8)
print(x)
print(x.dtype)

更改张量的数据类型

我们可以使用 type()?方法更改张量的数据类型:

1.?使用 torch.uint8 类型定义一个张量:

代码语言:javascript
复制
x=torch.ones(1,dtype=torch.uint8)
print(x.dtype)

2. 更改张量数据类型:

代码语言:javascript
复制
x=x.type(torch.float)
print(x.dtype)

将张量转换为 NumPy 数组

我们可以非常方便地将 PyTorch 张量转换为 NumPy 数组。

1. 定义一个张量:

代码语言:javascript
复制
x=torch.rand(2,2)
print(x)
print(x.dtype)

2. 将张量转换为 NumPy 数组:

代码语言:javascript
复制
y=x.numpy()
print(y)
print(y.dtype)

将 NumPy 数组转换为张量

我们还可以将 NumPy 数组转换为 PyTorch 张量。

1. 定义一个 NumPy 数组:

代码语言:javascript
复制
import numpy as np
x=np.zeros((2,2),dtype=np.float32)
print(x)
print(x.dtype)

2.NumPy 数组转换为 PyTorch 张量:

代码语言:javascript
复制
y=torch.from_numpy(x)
print(y)
print(y.dtype)

在设备之间移动张量

默认情况下,PyTorch 张量存储在 CPU 上,PyTorch 张量可以在使用?GPU 来加速计算。这是张量与 NumPy 数组相比的主要优势。为了利用这一优势,我们需要将张量移动到 CUDA 设备上,我们可以使用 to() 方法将张量移动到其它可用设备上。

1.CPU 上定义一个张量:

代码语言:javascript
复制
x=torch.tensor([1.5, 2])
print(x)
print(x.device)

2. 定义一个 CUDA 设备:

代码语言:javascript
复制
if torch.cuda.is_available():
    device = torch.device("cuda:0")

3. 将张量移动到 CUDA 设备上:

代码语言:javascript
复制
x = x.to(device)
print(x)
print(x.device)

4. 同样,我们可以将张量移动到 CPU

代码语言:javascript
复制
device = torch.device("cpu")
x = x.to(device)
print(x)
print(x.device)

5. 我们也可以直接在可用设备上创建张量:

代码语言:javascript
复制
device = torch.device("cuda:0")
x = torch.ones(2,2, device=device)
print(x)

小结

在本节中,我们首先定义了一个张量,获得了张量类型,并改变了它的类型。然后,我们将 PyTorch 张量转换为 NumPy 数组,然后进行相反的转换操作。同时,我们还介绍了如何使用 type()?方法更改张量数据类型。然后,我们学习了如何使用 numpy()?方法将 PyTorch 张量转换为 NumPy 数组。

之后,我们使用 from_numpy(x) 方法将 NumPy 数组转换为 PyTorch 张量。然后,我们向学习了如何使用 to()?方法将张量在 CPUCUDA 设备之间移动;如果创建张量时不指定设备,则张量将默认创建在 CPU 设备上。

本文系转载,前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系?cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 定义张量数据类型
      • 更改张量的数据类型
        • 将张量转换为 NumPy 数组
          • 将 NumPy 数组转换为张量
            • 在设备之间移动张量
              • 小结
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
              http://www.vxiaotou.com