zoukankan      html  css  js  c++  java
  • PyTorch中view的用法

    相当于numpy中resize()的功能,但是用法可能不太一样。

    我的理解是:

    把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。比如,

    a=torch.Tensor([[[1,2,3],[4,5,6]]])
    b=torch.Tensor([1,2,3,4,5,6])

    print(a.view(1,6))
    print(b.view(1,6))

    得到的结果都是tensor([[1., 2., 3., 4., 5., 6.]]) 

    再看一个例子:

    a=torch.Tensor([[[1,2,3],[4,5,6]]])
    print(a.view(3,2))

    将会得到:

    tensor([[1., 2.],
            [3., 4.],
            [5., 6.]])

    相当于就是从1,2,3,4,5,6顺序的拿数组来填充需要的形状。但是如果您想得到如下的结果:

    tensor([[1., 4.],
            [2., 5.],
            [3., 6.]])

    就需要使用另一个函数了:permute()。用法参见我的另一篇博客:PyTorch中permute的用法 

    另外,参数不可为空。参数中的-1就代表这个位置由其他位置的数字来推断,只要在不致歧义的情况的下,view参数就可以推断出来,也就是人可以推断出形状的情况下,view函数也可以推断出来。比如a tensor的数据个数是6个,如果view(1,-1),我们就可以根据tensor的元素个数推断出-1代表6。而如果是view(-1,-1,2),人不知道怎么推断,机器也不知道。还有一种情况是人可以推断出来,但是机器推断不出来的:view(-1,-1,6),人可以知道-1都代表1,但是机器不允许同时有两个负1。

    如果没有-1,那么所有参数的乘积就要和tensor中元素的总个数一致了,否则就会出现错误。
    ---------------------
    作者:York1996
    来源:CSDN
    原文:https://blog.csdn.net/york1996/article/details/81949843
    版权声明:本文为博主原创文章,转载请附上博文链接!

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/jfdwd/p/11185955.html
Copyright © 2011-2022 走看看