zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    《页面优化》-- 一个大话题,也是一个面试比较老俗的问题
    Single-SPA 前端微服务化 动态路由多系统合并
    浏览器的DNS缓存查看和清除
    es6 的类 class
    数据驱动表格| 根据json数据,自动生成合并式table
    隐式调用 以及使用技巧
    柯里化currying + 隐式调用 = 一个有名的add面试题
    工作笔记
    php升级版本
    git使用
  • 原文地址:https://www.cnblogs.com/Manuel/p/10774327.html
Copyright © 2011-2022 走看看