• pytorch 生成随机数;linspace();torch.logspace();ones/zeros/eye


    在使用PyTorch做实验时经常会用到生成随机数Tensor的方法,比如:

    torch.rand()

    torch.randn()

    torch.rand_like()

    torch.normal()

     

    torch.linespace()

    在很长一段时间里我都没有区分这些方法生成的随机数究竟有什么不同,由此在做实验的时候经常会引起一些莫名其妙的麻烦。

    所以在此做一个总结,以供大家阅读区分,不要重蹈我的覆辙。

     

    均匀分布

    torch.rand(*sizes, out=None) → Tensor

    返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数。张量的形状由参数sizes定义。

    参数:

    • sizes (int...) - 整数序列,定义了输出张量的形状
    • out (Tensor, optinal) - 结果张量

    例子:

    torch.rand(2, 3) 0.0836 0.6151 0.6958 0.6998 0.2560 0.0139 [torch.FloatTensor of size 2x3]

     

    标准正态分布

    torch.randn(*sizes, out=None) → Tensor

    返回一个张量,包含了从标准正态分布(均值为0,方差为1,即高斯白噪声)中抽取的一组随机数。张量的形状由参数sizes定义。

    参数:

    • sizes (int...) - 整数序列,定义了输出张量的形状
    • out (Tensor, optinal) - 结果张量

    例子:

    torch.randn(2, 3) 0.5419 0.1594 -0.0413 -2.7937 0.9534 0.4561 [torch.FloatTensor of size 2x3]

     

    离散正态分布

    torch.normal(means, std, out=None) → → Tensor

    返回一个张量,包含了从指定均值means和标准差std的离散正态分布中抽取的一组随机数。

    标准差std是一个张量,包含每个输出元素相关的正态分布标准差。

    参数:

    • means (float, optional) - 均值
    • std (Tensor) - 标准差
    • out (Tensor) - 输出张量

    例子:

    torch.normal(mean=0.5, std=torch.arange(1, 6)) -0.1505 -1.2949 -4.4880 -0.5697 -0.8996 [torch.FloatTensor of size 5]

     

    线性间距向量

    torch.linspace(start, end, steps=100, out=None) → Tensor

    返回一个1维张量,包含在区间start和end上均匀间隔的step个点。

    输出张量的长度由steps决定。

    参数:

    • start (float) - 区间的起始点
    • end (float) - 区间的终点
    • steps (int) - 在start和end间生成的样本数
    • out (Tensor, optional) - 结果张量

    例子:

    torch.linspace(3, 10, steps=5) 3.0000 4.7500 6.5000 8.2500 10.0000 [torch.FloatTensor of size 5]
    a=torch.rand(3,3)
    print(a)
    
    #与a形状类似的数组
    b=torch.rand_like(a)
    print(b)
    
    #随机产生1~9的数,形状为3x3
    c=torch.randint(1,10,(3,3))
    print(c)
    
    #产生一个全为7的2x3的张量
    d=torch.full([2,3],7)
    print(d)

    torch.linspace()与torch.logspace():

    #生成0到10的4个数构成的等差数列
    a = torch.linspace(0,10,steps=4)
    print(a)
    
    #生成0到10的5个数构成的等差数列
    b = torch.linspace(0,10,steps=5)
    print(b)
    
    #生成10的0次方为起始值,10的-1次方为终止值的8个数构成的等比数列
    c = torch.logspace(0,-1,steps=8)
    print(c)
    
    #生成10的1次方为起始值,10的2次方为终止值的5个数构成的等比数列
    d = torch.logspace(1,2,steps=5)
    print(d)

    ones/zeros/eye:

    #生成全为1形状为3x3的张量
    a = torch.ones(3,3)
    print(a)
    
    #生成全为0形状为3x3的张量
    b = torch.zeros(3,3)
    print(b)
    
    #生成形状为4x4的单位矩阵张量
    c = torch.eye(4,4)
    print(c)

    randperm()

    #产生0~9的10个随机数的张量
    a = torch.randperm(10)
    print(a)
    
    b = torch.randperm(2)
    print(b)

    转自:https://zhuanlan.zhihu.com/p/31231210

  • 相关阅读:
    使用 Rails Webpacker 安裝 Foundation 6
    如何验证 Email 地址:SMTP 协议入门教程
    PHPStorm.WebStrom等系列官方开发工具配置本地项目与运程服务器同步
    前端整合MathjaxJS的配置笔记
    支付宝2018年账单发布,更注重用户隐私保护
    公告!关于微信7.0安卓版已解决问题进展
    畅快买买买!购物类应用页面响应时间测评及优化建议
    是什么让我们走到最后,看完泪目!
    安卓绿色联盟执行组会议又双叒叕召开了
    华为如何打造智能终端的有趣灵魂?(上)
  • 原文地址:https://www.cnblogs.com/Manuel/p/10774327.html
Copyright © 2020-2023  润新知