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的创建的主要内容,如果未能解决你的问题,请参考以下文章