• 【Pytorch】:x.view() view()方法的使用


    在pytorch当中,我们经常会用到x.view()方法来进行数据维度的变化,但是这个方法具体该如何使用呢?

    下面我来记录一下笔记:

    一.按照传入数字使数据维度进行转换

    首先,我们可以传入我们想要的维度,然后按照传入的数字对数据进行维度变化。比如,x.view()当中可以放入列表或者是单个数字,比如我们有代码先生成一个3*2维度的tensor矩阵,那么我们的代码可以写成x.view(3,2) 也可以在view方法当中放入列表[3,2],最终为x.view([3,2])如下所示:

    import torch
    b=torch.randn(3,2)#也可以写成b=torch.randn([3,2]),效果是一样的
    print(b)

    输出如下:

    tensor([[-0.0035, -0.7276],
            [ 2.5166, -0.0649],
            [ 2.3062, -1.1144]])

    那么我们想要将其维度进行随意变化的话,可以使用view()方法,比如我想将其维度变化成:1*6,则使用方法view(1*6)即可。

    代码如下:

    import torch
    b=torch.randn(3,2)
    print(b)
    print(b.view(1,6))
    print(b.view(6,1))

    输出如下:

    tensor([[-0.0035, -0.7276],
            [ 2.5166, -0.0649],
            [ 2.3062, -1.1144]])
    tensor([[-0.0035, -0.7276,  2.5166, -0.0649,  2.3062, -1.1144]])
    tensor([[-0.0035],
            [-0.7276],
            [ 2.5166],
            [-0.0649],
            [ 2.3062],
            [-1.1144]])

    这样我们就可以看到tensor的维度确实根据我们所写进行变化了。

    二.传入数字-1,自动对维度进行变换

    这里讨论第二种方法,也就是在某一个维度,我们可以传入数字-1,自动对维度进行计算并变化:

    假设我们有一个数据维度为【3,5,2】的tensor,我们想要将其转化为其中两个维度分别为【3,1】,【5,2】,而剩下的第三个维度自动进行计算,那么我们可以使用-1来代替【3,1,10】当中的10,以及用-1来代替转化后【5,2,3】维度当中的数字3.我们可以发现3*1*10=3*5*2=5*2*3,因此变化后的维度乘积是相等的。

    代码如下:

    import torch
    a=torch.randn(3,5,2)
    print(a)
    print(a.view(3,1,-1).size())
    print(a.view([3,1,-1]).size()) #不管加不加上列表符号,最后reshape的结果是一样的
    print(a.view([5,2,-1]).size())

    输出如下:

    tensor([[[ 1.6498, -0.4354],
             [-1.0042, -0.1582],
             [ 1.2794, -0.1203],
             [ 0.9198,  2.8475],
             [ 0.0065,  1.5481]],
    
            [[ 0.7220, -1.1230],
             [ 0.2665, -0.6645],
             [-0.6159, -0.3833],
             [-1.4767,  0.8378],
             [-0.3257,  0.2394]],
    
            [[ 0.3784,  0.4233],
             [-0.5807,  1.2695],
             [ 1.7632,  0.7828],
             [ 1.0076,  0.6205],
             [ 0.9948, -1.2256]]])
    torch.Size([3, 1, 10])
    torch.Size([3, 1, 10])
    torch.Size([5, 2, 3])

    输出的维度确实为两个【3,1,10】,以及一个【5,2,3】,说明维度进行了自动的变化。

    remark:我们能不能使用view()方法将三维的数据,变成二维的数据呢?

    答案显然也是可以的,假设我们依然使用刚才的代码,但是只是将维度变化成二维,代码如下所示:

    import torch
    a=torch.randn(3,5,2)
    print(a.size())
    print(a.view([3,-1]).size())

    输出为:

    torch.Size([3, 5, 2])
    torch.Size([3, 10])

    因此,我们使用-1数字自动计算出了其余的一个维度,同时将三维的数据压缩为了2维的数据,view方法可谓是非常方便了!

  • 相关阅读:
    python day09
    python day08
    python day07
    python day06
    python day05
    Django-Form组件之字段
    python装饰器
    npm常用命令
    python常用模块-re 正则表达式
    Django-forms效验组件
  • 原文地址:https://www.cnblogs.com/geeksongs/p/15034108.html
Copyright © 2020-2023  润新知