Pytorch reshape tensor dimension

前端 未结 10 541
忘掉有多难
忘掉有多难 2021-02-03 17:56

For example, I have 1D vector with dimension (5). I would like to reshape it into 2D matrix (1,5).

Here is how I do it with numpy

>>> import num         


        
10条回答
  •  梦如初夏
    2021-02-03 18:23

    Assume the following code:

    import torch
    import numpy as np
    a = torch.tensor([1, 2, 3, 4, 5])
    

    The following three calls have the exact same effect:

    res_1 = a.unsqueeze(0)
    res_2 = a.view(1, 5)
    res_3 = a[np.newaxis,:]
    res_1.shape == res_2.shape == res_3.shape == (1,5)  # Returns true
    

    Notice that for any of the resulting tensors, if you modify the data in them, you are also modifying the data in a, because they don't have a copy of the data, but reference the original data in a.

    res_1[0,0] = 2
    a[0] == res_1[0,0] == 2  # Returns true
    

    The other way of doing it would be using the resize_ in place operation:

    a.shape == res_1.shape  # Returns false
    a.reshape_((1, 5))
    a.shape == res_1.shape # Returns true
    

    Be careful of using resize_ or other in-place operation with autograd. See the following discussion: https://pytorch.org/docs/stable/notes/autograd.html#in-place-operations-with-autograd

提交回复
热议问题