PyTorch随机数生成全解析 | torch.rand()家族函数使用指南
PyTorch提供多种随机数生成函数(注意:无直接torch.random()
函数),以下是常用函数及参数:
torch.rand(*size, *, generator=None, dtype=None, device=None, requires_grad=False)
size
:张量维度(必选),如(2,3)dtype
:数据类型,默认torch.float32
device
:CPU/GPU设备requires_grad
:是否启用梯度跟踪torch.randint(low, high, size, *, dtype=torch.int64, device=None)
low
:最小值(包含)high
:最大值(不包含)size
:输出形状torch.randn(*size, *, dtype=None, device=None, requires_grad=False)
# 生成3x3均匀分布矩阵
uniform_tensor = torch.rand(3, 3)
print("均匀分布:\n", uniform_tensor)
# 生成1-100的随机整数(形状2x2)
int_tensor = torch.randint(1, 100, (2,2))
print("\n随机整数:\n", int_tensor)
# 生成标准正态分布数据
normal_tensor = torch.randn(2, 3)
print("\n正态分布:\n", normal_tensor)
# 指定设备和数据类型
cuda_tensor = torch.rand(3, device='cuda', dtype=torch.float16)
# 生成不重复随机排列
perm = torch.randperm(10) # 0-9的随机排列
# 带梯度追踪的随机数
grad_tensor = torch.rand(2, requires_grad=True)
种子控制
torch.manual_seed(42) # 确保结果可复现
设备一致性
# 错误示范:CPU与GPU数据运算
cpu_tensor = torch.rand(3)
gpu_tensor = torch.rand(3).cuda()
result = cpu_tensor + gpu_tensor # 报错!
梯度陷阱
requires_grad=True
分布特性
函数 | 分布范围 | 常用场景 |
---|---|---|
rand() | [0,1)均匀分布 | 权重初始化 |
randn() | 均值0方差1正态分布 | 深度学习参数初始化 |
randint() | 离散整数 | 数据采样 |
性能优化
# 推荐做法
batch_data = torch.rand(1000, 256)
# 避免做法
slow_data = [torch.rand(256) for _ in range(1000)]
# 生成不含0的安全数据
safe_tensor = torch.rand(5) + 1e-6 # 防止除零错误
# 生成均值=5,方差=3的正态分布
custom_normal = 5 + torch.randn(10) * 3**0.5
# 生成50%概率的布尔掩码
mask = torch.rand(10) > 0.5
通过掌握这些技巧,你将能精准控制PyTorch随机数生成,为模型训练和实验提供可靠基础!