2.2 Tensor的创建

Posted 王小小小草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2.2 Tensor的创建相关的知识,希望对你有一定的参考价值。

欢迎订阅本专栏:《PyTorch深度学习实践》
订阅地址:https://blog.csdn.net/sinat_33761963/category_9720080.html

  • 第二章:认识Tensor的类型、创建、存储、api等,打好Tensor的基础,是进行PyTorch深度学习实践的重中之重的基础。
  • 第三章:学习PyTorch如何读入各种外部数据
  • 第四章:利用PyTorch从头到尾创建、训练、评估一个模型,理解与熟悉PyTorch实现模型的每个步骤,用到的模块与方法。
  • 第五章:学习如何利用PyTorch提供的3种方法去创建各种模型结构。
  • 第六章:利用PyTorch实现简单与经典的模型全过程:简单二分类、手写字体识别、词向量的实现、自编码器实现。
  • 第七章利用PyTorch实现复杂模型:翻译机(nlp领域)、生成对抗网络(GAN)、强化学习(RL)、风格迁移(cv领域)。
  • 第八章:PyTorch的其他高级用法:模型在不同框架之间的迁移、可视化、多个GPU并行计算。

2.2.1 与numpy的交互

可以将numpy的ndarray直接转换成tensor

import numpy as np
import torch

a = np.array([1,2,3,4,5])
t = torch.from_numpy(a)
print(t)
tensor([1, 2, 3, 4, 5], dtype=torch.int32)

自然,也可以将tensor转换我numpy

a = t.numpy()
print(a)
[1 2 3 4 5]

2.2.2 创建指定值的tensor

创建3*4大小的值都未0的向量,其中括号中的参数为tensor的size

t = torch.zeros(3,4)
print(t)
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

同理,这类api还有:

t = torch.ones(3,4)  # 创建值全为1的tensor
t = torch.eye(4,4)  # 创建4*4的对角矩阵
t = torch.empty(3,4)  # 创建3*4值全为空的均值
t = torch.full((3,4), 3.14)  # 创建3*4值为3.14的tensor
torch.ones_like(t) # 创建大小与t一样,值为1的tensor
torch.zeros_like(t) # 创建大小与t一样,值为0的tensor
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

注意,以上是通过t = torch.XX(n,m)创建了一个命名为t的tensor, 也可以根据torch.XX(n, m, t)创建一个命名为t的tensor。比如:

torch.zeros((3, 4), t)
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

2.2.3 创建等量序列

pytorch也提供了直接创建等差、等比、有序数列的函数。

t = torch.linspace(start=1, end=10, steps=5)  # 创建[1, 10]之间的5个数的等差数列
t = torch.logspace(start=1, end=10, steps=5)  # 创建[1, 10]之间的5个数的等比数列

t = torch.range(start=1, end=10, step=5)  # 创建[1, 10]之间的等间隔数据,间隔步长为5, 注意,该方法已被弃用
t = torch.arange(start=1, end=10, step=5)  # 创建[1, 10)之间的等间隔数据,间隔步长为5
C:\\Users\\CC\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py:4: UserWarning: torch.range is deprecated in favor of torch.arange and will be removed in 0.5. Note that arange generates values in [start; end), not [start; end].
  after removing the cwd from sys.path.

注意:
(1)linspace, logspace, range中是包含end边界的;arange中是不包含end边界的。

(2)linspace和logspace中的step是指生成数据的数量;range与arange中的step是指数据间隔的步长。

2.2.4 创建随机序列

pytorch还提供了创建随机数的几个典型的方法。

t = torch.randperm(n=10) #创建[0, 10)的随机整数
t = torch.rand(3,4)  # 创建3*4大小的[0,1]之间的随机小数
t = torch.randn(3,4) # 创建3*4大小的正态分布的随机数

2.2.5 从其他数据结构中创建

#从list创建
t = torch.Tensor([[1,2,3],[4,5,6]])
#从Numy创建
t = torch.Tensor(np.array([1,2,3]))
#从已知张量中创建
a = torch.Tensor([1,2,3])
t = torch.Tensor(a)
#从storage中创建
#每个tensor都会有storage,这个后面章节来叙述。

2.2.6 torch.Tensor()创建

无参创建

t = torch.Tensor()  # 创建了一个tensor([])的张量

指定参数创建

t = torch.Tensor(3,4)  # 创建了一个大小3*4的张量
t = torch.IntTensor(3,4)  # 创建了一个大小3*4的类型为整型的空张量
t = torch.IntTensor(3,4).zero_()  # 创建了一个大小3*4的类型为整型的空张量,并以0填充

以上是关于2.2 Tensor的创建的主要内容,如果未能解决你的问题,请参考以下文章

深度学习03:PyTorch的数据类型Tensor

7.1 利用PyTorch构造神经翻译机

7.1 利用PyTorch构造神经翻译机

动手学深度学习_2.2_autograd

吴裕雄--天生自然TensorFlow2教程:Tensor数据类型

Python语音合成(日文翻译)