Saya mencari untuk menumpuk satu array tensor shape=(1,2) di atas array shape=(1,2) lain, di dim=1, menggunakan metode stack() pytorch.

>>> import numpy as np
>>> import torch
>>> np_a = np.array([[1,2]])
>>> np_b = np.array([[3,4]])
>>> print(np_a)
[[1 2]]
>>> print(np_b)
[[3 4]]
>>> t_a = torch.from_numpy(np_a)
>>> t_b = torch.from_numpy(np_b)
>>> print(t_a)
tensor([[1, 2]])
>>> print(t_b)
tensor([[3, 4]])
>>> t_stacked = torch.stack((t_a, t_b), dim=1)
>>> print(t_stacked)
tensor([[[1, 2],
         [3, 4]]])

Tensor yang dihasilkan memiliki dimensi tambahan dan sekarang memiliki shape=(1,2,2). Mengapa stack() pytorch tidak berperilaku seperti vstack() numpy? Lihat di bawah:

>>> import numpy as np
>>> np_a = np.array([[1,2]])
>>> np_b = np.array([[3,4]])
>>> stacked = np.vstack((np_a, np_b))
>>> print(stacked)
[[1 2]
 [3 4]]

Bagaimana cara membuat pytorch tidak menambahkan dimensi?

0
sccrthlt 21 September 2019, 17:52

1 menjawab

Jawaban Terbaik

Saya tidak dapat memberi tahu Anda mengapa diputuskan agar pytorch stack berperilaku berbeda dari numpy (mungkin kompatibilitas dengan luatorch?). Bagaimanapun, untuk mendapatkan hasil yang diinginkan, Anda dapat menggunakan torch.cat:

>>> torch.cat((t_a, t_b), dim=0)     
tensor([[1, 2],
        [3, 4]])
1
peer 21 September 2019, 15:26