pytorch-张量-张量的生成

张量的生成:

import torch
import numpy as np

# 使用tensor.tensor()函数构造张量
a = torch.tensor([[1.0, 1.0], [2., 2.]])
print(a)

# 获取张量的维度
print("张量的维度", a.shape)

# 获取张量的形状大小
print("张量的大小", a.size())

# 获取张量中元素的个数
print("张量的元素个数", a.numel())

# 使用tensor.tensor()函数构造张量时
# 可以使用参数dtype修改张量的数据类型
# 使用requires_grad来指定张量是否需要计算梯度
b = torch.tensor((1, 2, 3), dtype=torch.float32, requires_grad=True)
print(b)

# 对于张量b计算sum(b^2)在每个元素上的梯度
y = b.pow(2).sum()
y.backward()
# 梯度求解的方法
# https://blog.csdn.net/huyaoyu/article/details/81059315
print("梯度为", b.grad)
# 注意只有浮点类型的张量可以计算梯度

# torch.Tensor()函数生成张量
c = torch.Tensor([1., 2., 3., 4.])
print(c)

# 根据形状参数构建特定尺寸的张量
d = torch.Tensor(2, 3)
print("2*3的形状张量:\n", d)

# 根据已经生成的张量可以使用torch.like()系列函数生成与指定张量维度相同,性质类似的张量
print("创建一个与d相同大小和类型的全1张量", torch.ones_like(d))
print("创建一个与d维度相同的全0张量", torch.zeros_like(d))
print("创建一个与d维度相同的随机张量", torch.rand_like(d))
e = [[1., 2.], [3., 4.]]
e = d.new_tensor(e)
print("将e列表转换为与d类型相似但尺寸不同的张量", d.new_tensor(e))
print(e.dtype)
print(d.dtype)
print("3*3使用1填充的张量:", d.new_full((3, 3), fill_value=1))
print("3*3的全0的张量:", d.new_zeros((3, 3)))
print("创建一个3*3的空张量", d.new_empty((3, 3)))
print("创建一个3*3的全一张量:", d.new_ones((3, 3)))

# 张量和numpy数据类型的转换
# 利用numpy数组生成张量
f = np.ones((3, 3))
ftensor = torch.as_tensor(f)
print(ftensor)
ftensor = torch.from_numpy(f)
print(ftensor)
# 使用numpy生成的数组默认就是64位浮点型数组

# 使用torch.numpy()函数可转换为numpy数组
print(ftensor.numpy())

# 随机生成张量
torch.manual_seed(123)
# 通过指定均值和标准差来生成随机数
a = torch.normal(mean=0, std=torch.tensor(1.0))
print(a)
# 如果mean参数和std参数有多个,那么则生成多个随机数
a = torch.normal(mean=0, std=torch.arange(1, 5.0))
print(a)
a = torch.normal(mean=torch.arange(1, 5.0), std=torch.arange(1, 5.0))
print(a)

# 使用torch.rand()函数,在区间[0,1]生成均匀分布的张量
b = torch.rand(3, 4)
print(b)

# 使用torch.rand_like()函数,可根据其他张量的维度,生成与其维度相同的随机张量
c = torch.ones(2, 3)
d = torch.rand_like(c)
print(d)

# 使用torch.randn()和torch.rand_like()函数则可生成服从标准正态分布的随机张量
print(torch.randn(3, 3))
print(torch.rand_like(c))

# 使用torch.randperm(n)函数则可将0~n(包含0,不包含n)之间的中的整数随机排序后输出
print(torch.randperm(10))

# 其他生成张量的函数
# start指定开始,end指定结束,step指定步长
print(torch.arange(start=0, end=10, step=2))

# torch.linspace()函数在范围内生成固定数量的等间隔张量
print(torch.linspace(start=0, end=10, steps=10))

# torch.logspace()函数生成一对数为间隔的张量
print(torch.logspace(start=0, end=10, steps=10))

# 生成全0张量
print(torch.zeros(3, 3))

# 生成全1张量
print(torch.ones(3, 3))

# 生成单位张量
print(torch.eye(3, 3))

# 生成用0.25填充的张量
print(torch.full((3, 3), fill_value=0.25))

猜你喜欢

转载自blog.csdn.net/weixin_45955630/article/details/111667841