Tensor的创建
在Torch中张量以 “类” 的形式封装起来,对张量的一些运算、处理的方法被封装在类中:
1、基本创建方式
1.1 torch.tensor
注意这里的tensor是小写,该API是根据指定的数据创建张量。
import torch
import numpy as np
def test001():
print(torch.__version__)
# 创建一个张量,传入一个数字
x=torch.tensor(10)
print(x)
# 创建一个张量,传入一个列表
x2=torch.tensor([10])
# x2=torch.tensor([10,20])
print(x2)
# 看张量是什么数据:对象类型 用类创建的==> torch.Tensor
print(type(x),type(x2))
print(type(100))
# 创建一个张量,传入一个numpy数组
arr1=np.array([1,2,3])
arr1=np.random.randint(0,100,(3,3))
x3=torch.tensor(arr1)
print(x3)
1.2 torch.Tensor
注意这里的Tensor是大写,该API根据形状创建张量,其也可用来创建指定数据的张量。
def test002():
x=torch.Tensor(10)
print(x)
x2=torch.Tensor(1,2,3,2)
print(x2)
x3=torch.Tensor([1,2,3])#传入一个列表 就表示把列表转化为张量tensor
print(x3)
x4=torch.Tensor([10])
print(x4)#tensor([10])和tensor(10)是两种不同的张量类型
2、创建线性和随机张量
在 PyTorch 中,可以轻松创建线性张量和随机张量。
2.1 创建线性张量
import torch
def test001():
torch.set_printoptions(sci_mode=False) # 设置打印精度
x = torch.arange(1,10,2) # 创建一个从1到9的步长为2的序列
print(x)
x2 = torch.linspace(0, 10, 5) # 在指定空间按照元素个数生成张量:等差
print(x2)
x3 = torch.logspace(0, 10, 5) # 在指定空间按照元素个数生成张量:等比
print(x3)
test001()
2.2 创建随机张量
使用torch.randn 创建随机张量。
2.2.1 随机数种子
随机数种子(Random Seed) 是用于初始化随机数生成器的一个值。在计算机科学和统计学中,随机数种子决定了随机数生成器的起始状态,从而影响生成的随机数序列。
原理:
随机数生成器实际上是一个确定性算法,它根据种子值生成一个伪随机数序列。如果种子相同,生成的随机数序列也会完全相同。
import torch
def test001():
# 设置随机数种子
torch.manual_seed(123)
# 获取随机数种子
print(torch.initial_seed())
if __name__ == "__main__":
test001()
2.2.2 随机张量
在 PyTorch 中,种子影响所有与随机性相关的操作,包括张量的随机初始化、数据的随机打乱、模型的参数初始化等。通过设置随机数种子,可以做到模型训练和实验结果在不同的运行中进行复现。
import torch
def test001():
# 1. 设置随机数种子
torch.manual_seed(123)
# 2. 获取随机数种子
print(torch.initial_seed())
# 3. 生成随机张量
print(torch.rand(2, 3))
# 4. 生成随机张量:标准正态分布
print(torch.randn(2, 3))
# 5. 原生服从正态分布:均值为2, 方差为3,形状为1*4的正态分布
print(torch.normal(mean=2, std=3, size=(1, 4)))
# 6. 生成随机张量整数
print(torch.randint(4,3)
if __name__ == "__main__":
test001()
3、创建0、1张量
3.1 创建全0张量
import torch
# 创建一个 2x3 的全 0 张量
zeros_tensor = torch.zeros(2, 3)
print(zeros_tensor)
3.2 创建全1张量
import torch
# 创建一个 2x3 的全 1 张量
ones_tensor = torch.ones(2, 3)
print(ones_tensor)
3.3 创建自定义形状的 0-1 张量
import torch
# 创建一个 3x3x3 的全 0 张量
zeros_tensor = torch.zeros(3, 3, 3)
print(zeros_tensor)
# 创建一个 3x3x3 的全 1 张量
ones_tensor = torch.ones(3, 3, 3)
print(ones_tensor)
3.4 创建与现有张量形状相同的 0-1 张量
import torch
# 创建一个随机张量
random_tensor = torch.randn(2, 3)
# 创建与 random_tensor 形状相同的全 0 张量
zeros_like_tensor = torch.zeros_like(random_tensor)
print(zeros_like_tensor)
# 创建与 random_tensor 形状相同的全 1 张量
ones_like_tensor = torch.ones_like(random_tensor)
print(ones_like_tensor)
3.5 创建布尔类型的 0-1 张量
import torch
# 创建一个布尔类型的全 0 张量
bool_zeros_tensor = torch.tensor([[0, 0], [0, 0]], dtype=torch.bool)
print(bool_zeros_tensor)
# 创建一个布尔类型的全 1 张量
bool_ones_tensor = torch.tensor([[1, 1], [1, 1]], dtype=torch.bool)
print(bool_ones_tensor)
3.6 创建稀疏的 0-1 张量
import torch
# 创建一个稀疏的 0-1 张量
indices = torch.tensor([[0, 1], [2, 0]]) # 非零元素的索引
values = torch.tensor([1, 1], dtype=torch.float32) # 非零元素的值
shape = (3, 3) # 张量的形状
sparse_tensor = torch.sparse_coo_tensor(indices, values, shape)
print(sparse_tensor)
4、创建指定值张量
torch.full 和 torch.full_like 创建全为指定值张量。
import torch
import numpy as np
def test001():
# 创建指定值的张量
data = torch.full((2, 3), 666.0)
print(data, data.dtype)
mask = np.zeros((3, 4))
data = torch.full_like(torch.tensor(mask), 999)
print(data)
if __name__ == "__main__":
test001()
5、创建单位矩阵张量
import torch
import numpy as np
def test002():
data = torch.eye(4)
print(data)
if __name__ == "__main__":
test002()