一,张量的属性
1.Variable变量是pytorch0.4以前定义可训练参数的类型,0.4版本以后自动合并到tensor中去了。
-
老版本Variable包含的属性:
- data:被包装的Tensor
- grad:data的梯度
- grad_fn:创建tensor的关键,是自动求导的关键
- requires_grad:指示是否需要保留梯度用于梯度计算
- is_leaf:指示是否是叶节点
-
0.4以后版本的tensor属性:
- 数据相关部分:data,dtype,shape,device
- 求导相关部分:requires_grad, grad, grad_fn, is_leaf
二,Tensor的创建方法:
1.直接创建:
- torch.tensor(data, dtype,device,reauires_grad, pin_memory(是否存于锁页内存))
arr = np.ones((3, 3))
print("ndarray的数据类型:", arr.dtype)
t = torch.tensor(arr, device='cuda')
# t = torch.tensor(arr)
2.从numpy中转换成tensor
- torch.from_numpy(ndarray)
- 注意tensor和原ndarray的内存地址是共享的
arr = np.array([[1, 2, 3], [4, 5, 6]])
t = torch.from_numpy(arr)
print("numpy array: ", arr)
print("tensor : ", t)
3.创建全0张量
- torch.zeros(size, out, layout(内存中的布局形式),device, requires_grad)
- out为原始输出的一份拷贝
out_t = torch.tensor([1])
t = torch.zeros((3, 3), out=out_t)
print(t, '\n', out_t)
print(id(t), id(out_t), id(t) == id(out_t))
4.依照输入数据的形式创建全0张量
- torch.zeros_like(input, dtype, layout, device, requires_grad)
5.创建全1张量和根据形式创建全1张量
- torch.ones()
- torch.ones_like()
6.填充创建张量,根据输入填充创建张量
- torch.full(size, val)
- torch.full_like()
t = torch.full((3, 3), 1)
print(t)
7.创建等差一维张量
- torch.arange(start, end, step)
t = torch.arange(2, 10, 2)
print(t)
8.创建等分张量
- torch.linspace(start, end, step{数列长度})
t = torch.linspace(2, 10, 5)
print(t)
9.创建对数均分数列
- torch.logspace(start, end, step{长度}, base{底, MR=10})
10.创建单位对角矩阵张量
- torch.eye(n{行数}, m{列数})
11.创建正态分布/高斯分布规律张量
- torch.normal(mean{均值}, std{标准差})
# mean:张量 std: 张量
mean = torch.arange(1, 5, dtype=torch.float)
std = torch.arange(1, 5, dtype=torch.float)
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)
# mean:标量 std: 标量
t_normal = torch.normal(0., 1., size=(4,))
print(t_normal)
# mean:张量 std: 标量
mean = torch.arange(1, 5, dtype=torch.float)
std = 1
t_normal = torch.normal(mean, std)
print("mean:{}\nstd:{}".format(mean, std))
print(t_normal)
12.创建标准正态分布规律张量
- torch.randn(size)
- torch.randn_like(size)
13.创建均匀分布规律张量
- 【0~1】:torch.rand torch.rand_like
- 【low~high】:torch.randint torch.randint_like
14.创建0到n-1的随机排列
- toch.randperm(n{张量长度})
15.以input为概率值,生成伯努利分布(0-1,两点)
- torch.bernoulli(input)