• PyTorch中view的用法


    理解

    我的理解就是将原来的tensor在进行维度的更改(根据参数的输入进行更改)后再进行输出,其实就是更换了tensor的一种查看方式

    例子

    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.]])

    注意

    但是要注意原来的tensor与新的tensor是共享内存的,也就是说对其中的一个tensor进行更改的话,另外一个tensor也会自动进行相应的修改。

    那么如果想生成不共享内存的tensor要怎么做呢?

    应该使用clone()函数克隆和再进行view(),而且使⽤ clone 还有⼀个好处是会被记录在计算图中,即梯度回传到副本时也会传到源 Tensor 。

    x_cp = x.clone().view(15)
    x -= 1
    print(x)
    print(x_cp)

    输出的结果:

    tensor([[ 0.6035, 0.8110, -0.0451],
     [ 0.8797, 1.0482, -0.0445],
     [-0.7229, 2.8663, -0.5655],
     [ 0.1604, -0.0254, 1.0739],
     [ 2.2628, -0.9175, -0.2251]])
    tensor([1.6035, 1.8110, 0.9549, 1.8797, 2.0482, 0.9555, 0.2771,
    3.8663, 0.4345,
     1.1604, 0.9746, 2.0739, 3.2628, 0.0825, 0.7749])

    注意:有的是这样使用的

    x.view(4, -1)

    其中的-1是表示你不确定这里的维数是多少,但是你确定前面的行数是3,让系统自动调整

  • 相关阅读:
    第三章预习
    预习非数值数据的编码方式
    预习原码补码
    第三章——运算方法和运算部件预习
    预习非数值数据的编码方式
    预习原码补码(习题+预习)
    预习非数值数据的编码方式
    预习原码补码
    10.21
    10.7作业
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/13533853.html
Copyright © 2020-2023  润新知