本篇介绍创建tensor的几种方式。
Import from numpy
- from_numpy()
- float64 是 double 类型,也就是说从numpy导入的float其实是double类型。
- 从numpy导入的 int 还是 int 类型
| 1 | In[2]: import numpy as np | 
Import from List
- 数据量不是很大,不需要numpy作为载体
- torch.tensor([ ])、- torch.FloatTensor([ ])、- torch.Tensor([ ])关系在后面介绍
- tensor 与 Tensor易混淆
- 多使用tensor。
| 1 | # 一维 | 
- torch.tensor()与- torch.Tensor()默认 生成- torch.FloatTensor类型,增强学习中多为- torch.DoubleTensor
- 通过 torch.set_default_tensor_type(torch.DoubleTensor)来更改
- torch.tensor()如果列表中都是int类型,则它会生成- torch.LongTensor
| 1 | In[173]: a = torch.tensor([2.2,3]) | 
data uninitialized
生成未初始化的数据
- torch.empty(d1,d2,d3)
- torch.FloatTensor(d1,d2,d3)
- torch.IntTensor(d1,d2,d3)
未初始化的tensor将出现的问题
| 1 | torch.empty(1) | 
- 这些数据有的特别特别小,有的特别特别大
- 这些数据如果没有后续的处理覆盖,将会产生bug,例如:可能在后面产生无穷大的数
| 1 | torch.isnan(torch.Tensor(2,3)) | 
- tensor只是一个容器,后面会将自己的数据放入的。
rand/rand_like, randint
随机初始化
推荐使用随机初始化。
- rand 会随机的在[0, 1] 之间取一个数。
- rand_like( a ) 读取向量 a 的shape在送到rand函数
- randint 先指定区间 [ min, max ),然后指定shape,shape要放在列表或元组中
| 1 | In[189]: torch.rand(3,3) | 
N(0, 1)
- randn()
- 均值为0,方差为1,数据集中在0附近
- 权值w 或 偏置 b 的一个初始化
N(u, std)
- normal()
| 1 | In[201]: torch.randn(3,3) | 
arange/range
- 生成等差数列 arange(),默认以1来递增
- range现在已经不建议使用了
| 1 | In[207]: torch.arange(0,10) | 
linspace/logspace
- 等分 linspace()[0,10] , steps=4
- logspace()也是等分,不过是以10^x 来得到输出的。
| 1 | In[210]: torch.linspace(0,10, steps=4) | 
ones/zeros/eye
- ones() 生成全部为1的
- zeros() 生成全部为0的
- eye() 生成单位向量
| 1 | In[215]: torch.ones(3,3) | 
randperm
- 随机打散 (numpy中是 random.shuffle)
- randperm()
| 1 | In[223]: torch.randperm(10) | 

