• 1、创建tensor数据,随机数,运算


    tensor(张量)是PyTorch的一种数据类型,可以是标量、一维向量、多维矩阵等。

    官网已经有介绍,总结如下:

    上图中types可以不同(dtype不设定就是同类型),并没有严格界限,不过最好按推荐的情况去使用。

    tensor.*中tensor就是带有数据的具体对象了,如下述案例中x、y等。

    1、Tensor与tensor区别

    import torch as t
    x=t.Tensor(2,3) #2行3列
    x=t.Tensor([2,3]) #浮点型,输出 tensor([2., 3.])
    #tensor里是已存在的数据,标量、向量、矩阵等。注意与Tensor区别
    x=t.tensor([2,3])  #与元素同类型,整型
    x=t.tensor([2.,3.]) #浮点型

    torch.Tensor()是python类,更明确地说,是默认张量类型torch.FloatTensor()的别名,torch.Tensor([1,2])会调用Tensor类的构造函数__init__,生成单精度浮点类型的张量。

    torch.tensor()是函数,返回的张量类型与元素同类型

    详解链接https://blog.csdn.net/tfcy694/article/details/85338745

    2、torch.*

    #未初始化的,里面是垃圾值
    x=t.empty(2,3)
    x
    #类似的还有ones
    x=t.zeros(2,3,dtype=t.long)
    x
    #[0,1]均匀分布,randn是高斯分布
    x=t.rand(2,3)
    x

    3、torch.*_like、torch.new_*

    #与x等大,类型不同(若设定)
    y=t.zeros_like(x,dtype=t.float)
    y
    #y与x不等大,同类型(若不设定)
    y=x.new_zeros(3,2)
    #y.type()
    #y.size()
    y

     注意,如果报错,一般是因为类型不是Tensor默认的浮点型,转换下就可以了

    其他总结:

    import torch as t
    a=t.arange(0,5,2) #步长为2的等差数列,左闭右开
    b=t.linspace(0,5,3) #指定间隔范围内返回均匀间隔的数字
    c1=t.randn(2,3) #标准正太分布
    c2=t.rand(2,3) #0-1的均匀随机分布
    d=t.randperm(3) #长度为3的随机排列,从0开始
    e=t.eye(2,3) #对角线为1的矩阵,行列数可以不一致
    print("a",a)
    print("b",b)
    print("c1",c1)
    print("c2",c2)
    print("d",d)
    print("e",e)

    view调整形状:

    a=t.arange(0,6) 
    print(a)
    b=a.view(2,-1) #调整形状,-1自动计算列数。注意b与a同一内存
    print(b)
    c=b.view(1,1,2,-1) #2维变4维
    print(c)
    c.size()

    索引:

    a=t.randn(3,4)
    a[0] #第1行
    a[:,0] #第1列
    a[0,2] #第1行3列的元素
    a[0,-1] #第1行最后1列的元素
    a[:2] #前2行,左闭右开,即0、1行
    #都是第1行前2列,但形状不同
    print(a[0,:2])  #1维
    print(a[0:1,:2]) #2维,1*2
    
    x=t.arange(0,27).view(3,3,3) #3*3*3
    x[[1,2],[1,2],[2,0]] # x[[1,1,2],[2,2,0]]
    x[[2,1,0],[0],[1]] #x[[2,0,1],[1,0,1],[0,0,1]]

    按条件选取元素

    a=t.randn(3,4)
    a[a>1] #选取大于1的元素
    a[a!=0]

     tensor函数

    a=t.arange(0.,6.).view(2,-1) #注意浮点型
    t.cos(a) #余弦,整型会报错
    t.fmod(a,3) #取余,a%3
    t.pow(a,2) #次幂,a**2
    t.clamp(a,min=3) #低于3的置为3
    t.clamp(a,min=2,max=4) #低于2的置为2,高于4的置为4
    #类似函数还有,abs、sqrt、ceil/round/floor/trunc上取整/四舍五入/下取整/只留整数部分

    归并操作:

    mean/sum/median/mode 均值/和/中位数/众数
    norm/dist 范数/距离
    std/var 标准差/方差
    cumsum/cumprod 累加/累乘

    以上函数大多有dim这个参数,dim设置规律如下:

    对于形状(m,n,k),

    dim=0,则输出形状(1,n,k)或(n,k)

    dim=1,则输出形状(m,1,k)或(m,k)

    dim=2,则输出形状(m,n,1)或(m,n)

     有无1,取决于参数keepdim,keepdim=True则保留维度1,默认是False。

    b=t.ones(2,3)
    print(b.sum(dim=0,keepdim=True)) #1*3,二维
    print(b.sum(dim=0)) #3,注意不是1*3,一维
    print(b.sum(dim=1)) #对于二维矩阵:dim=0累加列。dim=1累加行。

     矩阵运算:

     注意,转置会使得内存空间不连续。

    a=t.linspace(0,15,6).view(2,-1)
    b=a.t()
    print(b.is_contiguous()) #转置后b的内存空间是不连续的
    c=b.contiguous() #重新分配新的连续的空间c,b依然是不连续的。
    print(b.is_contiguous())
    print(c.is_contiguous())

    其他参考 http://studyai.com/pytorch-1.4/beginner/blitz/tensor_tutorial.html#sphx-glr-beginner-blitz-tensor-tutorial-py

  • 相关阅读:
    Java 8 CompletableFuture思考
    Math.ceil 笔记
    Python virtual env
    Reactive Stream: 如何将两个数据流接到一起,然后进行操作
    基于Apollo实现.NET Core微服务统一配置(测试环境-单机)
    在ASP.NET Core 2.x中获取客户端IP地址
    Entity Framework Core(3)-配置DbContext
    .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能
    Entity Framework Core 入门(2)
    Entity Framework Core介绍(1)
  • 原文地址:https://www.cnblogs.com/xixixing/p/12625563.html
Copyright © 2020-2023  润新知