view - ์์์ ์๋ฅผ ์ ์งํ๋ฉด์ ํ ์์ ํฌ๊ธฐ ๋ณ๊ฒฝ
t = np.array([[[0, 1, 2],
[3, 4, 5]],
[[6, 7, 8],
[9, 10, 11]]])
ft = torch.FloatTensor(t)
ft๋ผ๋ ์ด๋ฆ์ 3์ฐจ์ ํ ์๋ฅผ ๋ง๋ค์์ต๋๋ค. ํฌ๊ธฐ(shape)๋ฅผ ํ์ธํด๋ณด๊ฒ ์ต๋๋ค.
print(ft.shape)
torch.Size([2, 2, 3])
4-1) 3์ฐจ์ ํ ์์์ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝ
์ด์ ft ํ ์๋ฅผ view๋ฅผ ์ฌ์ฉํ์ฌ ํฌ๊ธฐ(shape)๋ฅผ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝํด๋ด ์๋ค.
print(ft.view([-1, 3])) # ft๋ผ๋ ํ
์๋ฅผ (?, 3)์ ํฌ๊ธฐ๋ก ๋ณ๊ฒฝ
print(ft.view([-1, 3]).shape)
tensor([[ 0., 1., 2.],
[ 3., 4., 5.],
[ 6., 7., 8.],
[ 9., 10., 11.]])
torch.Size([4, 3])
view([-1, 3])์ด ๊ฐ์ง๋ ์๋ฏธ๋ ์ด์ ๊ฐ์ต๋๋ค. -1์ ์ฒซ๋ฒ์งธ ์ฐจ์์ ์ฌ์ฉ์๊ฐ ์ ๋ชจ๋ฅด๊ฒ ์ผ๋ ํ์ดํ ์น์ ๋งก๊ธฐ๊ฒ ๋ค๋ ์๋ฏธ์ด๊ณ , 3์ ๋๋ฒ์งธ ์ฐจ์์ ๊ธธ์ด๋ 3์ ๊ฐ์ง๋๋ก ํ๋ผ๋ ์๋ฏธ์ ๋๋ค. ๋ค์ ๋งํด ํ์ฌ 3์ฐจ์ ํ ์๋ฅผ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝํ๋ (?, 3)์ ํฌ๊ธฐ๋ก ๋ณ๊ฒฝํ๋ผ๋ ์๋ฏธ์ ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก (4, 3)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ํ ์๋ฅผ ์ป์์ต๋๋ค.
๋ด๋ถ์ ์ผ๋ก ํฌ๊ธฐ ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. (2, 2, 3) -> (2 × 2, 3) -> (4, 3)
๊ท์น์ ์ ๋ฆฌํด๋ด ์๋ค.
- view๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ์ ๊ณผ ๋ณ๊ฒฝ ํ์ ํ ์ ์์ ์์์ ๊ฐ์๊ฐ ์ ์ง๋์ด์ผ ํฉ๋๋ค.
- ํ์ดํ ์น์ view๋ ์ฌ์ด์ฆ๊ฐ -1๋ก ์ค์ ๋๋ฉด ๋ค๋ฅธ ์ฐจ์์ผ๋ก๋ถํฐ ํด๋น ๊ฐ์ ์ ์ถํฉ๋๋ค.
๋ณ๊ฒฝ ์ ํ ์์ ์์์ ์๋ (2 × 2 × 3) = 12๊ฐ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ํ ํ ์์ ์์์ ๊ฐ์ ๋ํ (4 × 3) = 12๊ฐ์์ต๋๋ค.๋ด๋ถ์ ์ผ๋ก ํฌ๊ธฐ ๋ณํ์ ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค. (2, 2, 3) -> (2 × 2, 3) -> (4, 3)
๊ท์น์ ์ ๋ฆฌํด๋ด ์๋ค.
- view๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ์ ๊ณผ ๋ณ๊ฒฝ ํ์ ํ ์ ์์ ์์์ ๊ฐ์๊ฐ ์ ์ง๋์ด์ผ ํฉ๋๋ค.
- ํ์ดํ ์น์ view๋ ์ฌ์ด์ฆ๊ฐ -1๋ก ์ค์ ๋๋ฉด ๋ค๋ฅธ ์ฐจ์์ผ๋ก๋ถํฐ ํด๋น ๊ฐ์ ์ ์ถํฉ๋๋ค.
๋ณ๊ฒฝ ์ ํ ์์ ์์์ ์๋ (2 × 2 × 3) = 12๊ฐ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ํ ํ ์์ ์์์ ๊ฐ์ ๋ํ (4 × 3) = 12๊ฐ์์ต๋๋ค.
4-2) 3์ฐจ์ ํ ์์ ํฌ๊ธฐ ๋ณ๊ฒฝ
์ด๋ฒ์๋ 3์ฐจ์ ํ ์์์ 3์ฐจ์ ํ ์๋ก ์ฐจ์์ ์ ์งํ๋, ํฌ๊ธฐ(shape)๋ฅผ ๋ฐ๊พธ๋ ์์ ์ ํด๋ณด๊ฒ ์ต๋๋ค. view๋ก ํ ์์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋๋ผ๋ ์์์ ์๋ ์ ์ง๋์ด์ผ ํ๋ค๊ณ ์ธ๊ธํ ๋ฐ ์์ต๋๋ค. ๊ทธ๋ ๋ค๋ฉด (2 × 2 × 3) ํ ์๋ฅผ (? × 1 × 3) ํ ์๋ก ๋ณ๊ฒฝํ๋ผ๊ณ ํ๋ฉด ?๋ ๋ช ์ฐจ์์ธ๊ฐ์?
(2 × 2 × 3) = (? × 1 × 3) = 12๋ฅผ ๋ง์กฑํด์ผ ํ๋ฏ๋ก ?๋ 4๊ฐ ๋ฉ๋๋ค. ์ด๋ฅผ ์ค์ต์ผ๋ก ํ์ธํด๋ด ์๋ค.
print(ft.view([-1, 1, 3]))
print(ft.view([-1, 1, 3]).shape)
tensor([[[ 0., 1., 2.]],
[[ 3., 4., 5.]],
[[ 6., 7., 8.]],
[[ 9., 10., 11.]]])
torch.Size([4, 1, 3])
5) ์คํด์ฆ(Squeeze) - 1์ธ ์ฐจ์์ ์ ๊ฑฐํ๋ค.
์คํด์ฆ๋ ์ฐจ์์ด 1์ธ ๊ฒฝ์ฐ์๋ ํด๋น ์ฐจ์์ ์ ๊ฑฐํฉ๋๋ค.
์ค์ต์ ์ํด ์์๋ก (3 × 1)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ 2์ฐจ์ ํ
์๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
ft = torch.FloatTensor([[0], [1], [2]])
print(ft)
print(ft.shape)
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
ํด๋น ํ ์๋ (3 × 1)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋๋ค. ๋๋ฒ์งธ ์ฐจ์์ด 1์ด๋ฏ๋ก squeeze๋ฅผ ์ฌ์ฉํ๋ฉด (3,)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ํ ์๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
print(ft.squeeze())
print(ft.squeeze().shape)
tensor([0., 1., 2.])
torch.Size([3])
์์ ๊ฒฐ๊ณผ๋ 1์ด์๋ ๋๋ฒ์งธ ์ฐจ์์ด ์ ๊ฑฐ๋๋ฉด์ (3,)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ ํ ์๋ก ๋ณ๊ฒฝ๋์ด 1์ฐจ์ ๋ฒกํฐ๊ฐ ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
6) ์ธ์คํด์ฆ(Unsqueeze) - ํน์ ์์น์ 1์ธ ์ฐจ์์ ์ถ๊ฐํ๋ค.
์ธ์คํด์ฆ๋ ์คํด์ฆ์ ์ ๋ฐ๋์
๋๋ค. ํน์ ์์น์ 1์ธ ์ฐจ์์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
์ค์ต์ ์ํด ์์๋ก (3,)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ 1์ธ ์ฐจ์ ํ
์๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค.
ft = torch.Tensor([0, 1, 2])
print(ft.shape)
torch.Size([3])
ํ์ฌ๋ ์ฐจ์์ด 1๊ฐ์ธ 1์ฐจ์ ๋ฒกํฐ์ ๋๋ค. ์ฌ๊ธฐ์ ์ฒซ๋ฒ์งธ ์ฐจ์์ 1์ธ ์ฐจ์์ ์ถ๊ฐํด๋ณด๊ฒ ์ต๋๋ค. ์ฒซ๋ฒ์งธ ์ฐจ์์ ์ธ๋ฑ์ค๋ฅผ ์๋ฏธํ๋ ์ซ์ 0์ ์ธ์๋ก ๋ฃ์ผ๋ฉด ์ฒซ๋ฒ์งธ ์ฐจ์์ 1์ธ ์ฐจ์์ด ์ถ๊ฐ๋ฉ๋๋ค.
print(ft.unsqueeze(0)) # ์ธ๋ฑ์ค๊ฐ 0๋ถํฐ ์์ํ๋ฏ๋ก 0์ ์ฒซ๋ฒ์งธ ์ฐจ์์ ์๋ฏธํ๋ค.
print(ft.unsqueeze(0).shape)
tensor([[0., 1., 2.]])
torch.Size([1, 3])
์ ๊ฒฐ๊ณผ๋ (3,)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ก๋ 1์ฐจ์ ๋ฒกํฐ๊ฐ (1, 3)์ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ๋ฐฉ๊ธ ํ ์ฐ์ฐ์ ์์ ๋ฐฐ์ด view๋ก๋ ๊ตฌํ ๊ฐ๋ฅํฉ๋๋ค. 2์ฐจ์์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ผ๋ฉด์ ์ฒซ๋ฒ์งธ ์ฐจ์์ 1์ด๊ธฐ๋ฅผ ์ํ๋ค๋ฉด view์์ (1, -1)์ ์ธ์๋ก ์ฌ์ฉํ๋ฉด๋ฉ๋๋ค.
print(ft.view(1, -1))
print(ft.view(1, -1).shape)
tensor([[0., 1., 2.]])
torch.Size([1, 3])
์์ ๊ฒฐ๊ณผ๋ unsqueeze์ view๊ฐ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ฒ์๋ unsqueeze์ ์ธ์๋ก 1์ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค. ์ธ๋ฑ์ค๋ 0๋ถํฐ ์์ํ๋ฏ๋ก ์ด๋ ๋๋ฒ์งธ ์ฐจ์์ 1์ ์ถ๊ฐํ๊ฒ ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํ์ฌ ํฌ๊ธฐ๋ (3,)์ด์์ผ๋ฏ๋ก ๋๋ฒ์งธ ์ฐจ์์ 1์ธ ์ฐจ์์ ์ถ๊ฐํ๋ฉด (3, 1)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ์ค์ต์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
print(ft.unsqueeze(1))
print(ft.unsqueeze(1).shape)
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
์ด๋ฒ์๋ unsqueeze์ ์ธ์๋ก -1์ ๋ฃ์ด๋ณด๊ฒ ์ต๋๋ค. -1์ ์ธ๋ฑ์ค ์์ผ๋ก ๋ง์ง๋ง ์ฐจ์์ ์๋ฏธํฉ๋๋ค. ํ์ฌ ํฌ๊ธฐ๋ (3,)์ด์์ผ๋ฏ๋ก ๋ง์ง๋ง ์ฐจ์์ 1์ธ ์ฐจ์์ ์ถ๊ฐํ๋ฉด (3, 1)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๊ฒ ๋ฉ๋๋ค. ๋ค์ ๋งํด ํ์ฌ ํ ์์ ๊ฒฝ์ฐ์๋ 1์ ๋ฃ์ ๊ฒฝ์ฐ์ -1์ ๋ฃ์ ๊ฒฝ์ฐ๊ฐ ๊ฒฐ๊ณผ๊ฐ ๋์ผํฉ๋๋ค. ์ค์ต์ ์งํํด๋ณด๊ฒ ์ต๋๋ค.
print(ft.unsqueeze(-1))
print(ft.unsqueeze(-1).shape)
tensor([[0.],
[1.],
[2.]])
torch.Size([3, 1])
๋งจ ๋ค์ 1์ธ ์ฐจ์์ด ์ถ๊ฐ๋๋ฉด์ 1์ฐจ์ ๋ฒกํฐ๊ฐ (3, 1)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝ๋์์ต๋๋ค.
- view(), squeeze(), unsqueeze()๋ ํ ์์ ์์ ์๋ฅผ ๊ทธ๋๋ก ์ ์งํ๋ฉด์ ๋ชจ์๊ณผ ์ฐจ์์ ์กฐ์ ํฉ๋๋ค.
7) ํ์ ์บ์คํ (Type Casting)
ํ ์์๋ ์๋ฃํ์ด๋ผ๋ ๊ฒ์ด ์์ต๋๋ค. ๊ฐ ๋ฐ์ดํฐํ๋ณ๋ก ์ ์๋์ด์ ธ ์๋๋ฐ, ์๋ฅผ ๋ค์ด 32๋นํธ์ ๋ถ๋ ์์์ ์ torch.FloatTensor๋ฅผ, 64๋นํธ์ ๋ถํธ ์๋ ์ ์๋ torch.LongTensor๋ฅผ ์ฌ์ฉํฉ๋๋ค. GPU ์ฐ์ฐ์ ์ํ ์๋ฃํ๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด torch.cuda.FloatTensor๊ฐ ๊ทธ ์์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด ์๋ฃํ์ ๋ณํํ๋ ๊ฒ์ ํ์ ์บ์คํ ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฐ์ ์ค์ต์ ์ํด long ํ์ ์ lt๋ผ๋ ํ ์๋ฅผ ์ ์ธํฉ๋๋ค.
lt = torch.LongTensor([1, 2, 3, 4])
print(lt)
ํ ์์๋ค๊ฐ .float()๋ฅผ ๋ถ์ด๋ฉด ๋ฐ๋ก floatํ์ผ๋ก ํ์ ์ด ๋ณ๊ฒฝ๋ฉ๋๋ค.
print(lt.float())
tensor([1., 2., 3., 4.])
์ด๋ฒ์๋ Byte ํ์ ์ bt๋ผ๋ ํ ์๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
bt = torch.ByteTensor([True, False, False, True])
print(bt)
tensor([1, 0, 0, 1], dtype=torch.uint8)
์ฌ๊ธฐ์ .long()์ด๋ผ๊ณ ํ๋ฉด long ํ์ ์ ํ ์๋ก ๋ณ๊ฒฝ๋๊ณ .float()์ด๋ผ๊ณ ํ๋ฉด float ํ์ ์ ํ ์๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค.
print(bt.long())
print(bt.float())
tensor([1, 0, 0, 1])
tensor([1., 0., 0., 1.])
8) ์ฐ๊ฒฐํ๊ธฐ(concatenate)
์ด๋ฒ์๋ ๋ ํ
์๋ฅผ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค.
์ฐ์ (2 × 2) ํฌ๊ธฐ์ ํ
์๋ฅผ ๋ ๊ฐ ๋ง๋ญ๋๋ค.
x = torch.FloatTensor([[1, 2], [3, 4]])
y = torch.FloatTensor([[5, 6], [7, 8]])
์ด์ ๋ ํ ์๋ฅผ torch.cat([ ])๋ฅผ ํตํด ์ฐ๊ฒฐํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฐ๊ฒฐ ๋ฐฉ๋ฒ์ ํ ๊ฐ์ง๋ง ์๋ ๊ฒ์ด ์๋๋๋ค. torch.cat์ ์ด๋ ์ฐจ์์ ๋๋ฆด ๊ฒ์ธ์ง๋ฅผ ์ธ์๋ก ์ค ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด dim=0์ ์ฒซ๋ฒ์งธ ์ฐจ์์ ๋๋ฆฌ๋ผ๋ ์๋ฏธ๋ฅผ ๋ด๊ณ ์์ต๋๋ค.
print(torch.cat([x, y], dim=0))
tensor([[1., 2.],
[3., 4.],
[5., 6.],
[7., 8.]])
dim=0์ ์ธ์๋ก ํ๋๋ ๋ ๊ฐ์ (2 × 2) ํ ์๊ฐ (4 × 2) ํ ์๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฒ์๋ dim=1์ ์ธ์๋ก ์ฃผ๊ฒ ์ต๋๋ค.
print(torch.cat([x, y], dim=1))
tensor([[1., 2., 5., 6.],
[3., 4., 7., 8.]])
dim=1์ ์ธ์๋ก ํ๋๋ ๋ ๊ฐ์ (2 × 2) ํ ์๊ฐ (2 × 4) ํ ์๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
- ๋ฅ ๋ฌ๋์์๋ ์ฃผ๋ก ๋ชจ๋ธ์ ์ ๋ ฅ ๋๋ ์ค๊ฐ ์ฐ์ฐ์์ ๋ ๊ฐ์ ํ ์๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ๋ ํ ์๋ฅผ ์ฐ๊ฒฐํด์ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ ๊ฐ์ง์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ค๋ ์๋ฏธ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
9) ์คํํน(Stacking)
์ฐ๊ฒฐ(concatenate)์ ํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์คํํน(Stacking)์ด ์์ต๋๋ค. ์คํํน์ ์์ด๋ก ์๋๋ค๋ ์๋ฏธ์ ๋๋ค. ๋๋ก๋ ์ฐ๊ฒฐ์ ํ๋ ๊ฒ๋ณด๋ค ์คํํน์ด ๋ ํธ๋ฆฌํ ๋๊ฐ ์๋๋ฐ, ์ด๋ ์คํํน์ด ๋ง์ ์ฐ์ฐ์ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ค์ต์ ์ํด ํฌ๊ธฐ๊ฐ (2,)๋ก ๋ชจ๋ ๋์ผํ 3๊ฐ์ ๋ฒกํฐ๋ฅผ ๋ง๋ญ๋๋ค.
x = torch.FloatTensor([1, 4])
y = torch.FloatTensor([2, 5])
z = torch.FloatTensor([3, 6])
์ด์ torch.stack์ ํตํด์ 3๊ฐ์ ๋ฒกํฐ๋ฅผ ๋ชจ๋ ์คํํนํด๋ณด๊ฒ ์ต๋๋ค.
print(torch.stack([x, y, z]))
tensor([[1., 4.],
[2., 5.],
[3., 6.]])
์ ๊ฒฐ๊ณผ๋ 3๊ฐ์ ๋ฒกํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ์์ฌ (3 × 2) ํ ์๊ฐ ๋ ๊ฒ์ ๋ณด์ฌ์ค๋๋ค.
์คํํน์ ์ฌ์ค ๋ง์ ์ฐ์ฐ์ ํ ๋ฒ์ ์ถ์ฝํ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์์ ์ ์๋์ ์ฝ๋์ ๋์ผํ ์์ ์ ๋๋ค.
print(torch.cat([x.unsqueeze(0), y.unsqueeze(0), z.unsqueeze(0)], dim=0))
x, y, z๋ ๊ธฐ์กด์๋ ์ ๋ถ (2,)์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ก์ต๋๋ค. ๊ทธ๋ฐ๋ฐ .unsqueeze(0)์ ํ๋ฏ๋ก์ 3๊ฐ์ ๋ฒกํฐ๋ ์ ๋ถ (1, 2)์ ํฌ๊ธฐ์ 2์ฐจ์ ํ ์๋ก ๋ณ๊ฒฝ๋ฉ๋๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ(concatenate)๋ฅผ ์๋ฏธํ๋ cat์ ์ฌ์ฉํ๋ฉด (3 x 2) ํ ์๊ฐ ๋ฉ๋๋ค.
tensor([[1., 4.],
[2., 5.],
[3., 6.]])
์์์๋ torch.stack([x, y, z])๋ผ๋ ํ ๋ฒ์ ์ปค๋งจ๋๋ก ์ํํ์ง๋ง, ์ฐ๊ฒฐ(concatenate)๋ก ์ด๋ฅผ ๊ตฌํํ๋ ค๊ณ ํ๋๋ ๊ฝค ๋ณต์กํด์ก์ต๋๋ค.
์คํํน์ ์ถ๊ฐ์ ์ผ๋ก dim์ ์ธ์๋ก ์ค ์๋ ์์ต๋๋ค. ์ด๋ฒ์๋ dim=1 ์ธ์๋ฅผ ์ฃผ๊ฒ ์ต๋๋ค.
์ด๋ ๋๋ฒ์งธ ์ฐจ์์ด ์ฆ๊ฐํ๋๋ก ์์ผ๋ผ๋ ์๋ฏธ๋ก ํด์ํ ์ ์์ต๋๋ค.
print(torch.stack([x, y, z], dim=1))
tensor([[1., 2., 3.],
[4., 5., 6.]])
์์ ๊ฒฐ๊ณผ๋ ๋๋ฒ์งธ ์ฐจ์์ด ์ฆ๊ฐํ๋๋ก ์คํํน์ด ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก (2 × 3) ํ
์๊ฐ ๋ฉ๋๋ค.
10) ones_like์ zeros_like - 0์ผ๋ก ์ฑ์์ง ํ ์์ 1๋ก ์ฑ์์ง ํ ์
์ค์ต์ ์ํด (2 × 3) ํ ์๋ฅผ ๋ง๋ญ๋๋ค.
x = torch.FloatTensor([[0, 1, 2], [2, 1, 0]])
print(x)
tensor([[0., 1., 2.],
[2., 1., 0.]])
์ ํ ์์ ones_like๋ฅผ ํ๋ฉด ๋์ผํ ํฌ๊ธฐ(shape)์ง๋ง 1์ผ๋ก๋ง ๊ฐ์ด ์ฑ์์ง ํ ์๋ฅผ ์์ฑํฉ๋๋ค.
print(torch.ones_like(x)) # ์
๋ ฅ ํ
์์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ํ๋ฉด์ ๊ฐ์ 1๋ก ์ฑ์ฐ๊ธฐ
tensor([[1., 1., 1.],
[1., 1., 1.]])
์ ํ ์์ zeros_like๋ฅผ ํ๋ฉด ๋์ผํ ํฌ๊ธฐ(shape)์ง๋ง 0์ผ๋ก๋ง ๊ฐ์ด ์ฑ์์ง ํ ์๋ฅผ ์์ฑํฉ๋๋ค.
print(torch.zeros_like(x)) # ์
๋ ฅ ํ
์์ ํฌ๊ธฐ๋ฅผ ๋์ผํ๊ฒ ํ๋ฉด์ ๊ฐ์ 0์ผ๋ก ์ฑ์ฐ๊ธฐ
tensor([[0., 0., 0.],
[0., 0., 0.]])
11) In-place Operation (๋ฎ์ด์ฐ๊ธฐ ์ฐ์ฐ)
์ค์ต์ ์ํด (2 × 2) ํ ์๋ฅผ ๋ง๋ค๊ณ x์ ์ ์ฅํฉ๋๋ค.
x = torch.FloatTensor([[1, 2], [3, 4]])
๊ณฑํ๊ธฐ ์ฐ์ฐ์ ํ ๊ฐ๊ณผ ๊ธฐ์กด์ ๊ฐ์ ์ถ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค.
print(x.mul(2.)) # ๊ณฑํ๊ธฐ 2๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
print(x) # ๊ธฐ์กด์ ๊ฐ ์ถ๋ ฅ
tensor([[2., 4.],
[6., 8.]])
tensor([[1., 2.],
[3., 4.]])
์ฒซ๋ฒ์งธ ์ถ๋ ฅ์ ๊ณฑํ๊ธฐ 2๊ฐ ์ํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ๋๋ฒ์งธ ์ถ๋ ฅ์ ๊ธฐ์กด์ ๊ฐ์ด ๊ทธ๋๋ก ์ถ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ณฑํ๊ธฐ 2๋ฅผ ์ํํ์ง๋ง ์ด๋ฅผ x์๋ค๊ฐ ๋ค์ ์ ์ฅํ์ง ์์์ผ๋, ๊ณฑํ๊ธฐ ์ฐ์ฐ์ ํ๋๋ผ๋ ๊ธฐ์กด์ ๊ฐ x๋ ๋ณํ์ง ์๋ ๊ฒ์ด ๋น์ฐํฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฐ์ฐ ๋ค์ _๋ฅผ ๋ถ์ด๋ฉด ๊ธฐ์กด์ ๊ฐ์ ๋ฎ์ด์ฐ๊ธฐ ํฉ๋๋ค.
print(x.mul_(2.)) # ๊ณฑํ๊ธฐ 2๋ฅผ ์ํํ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ x์ ๊ฐ์ ์ ์ฅํ๋ฉด์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
print(x) # ๊ธฐ์กด์ ๊ฐ ์ถ๋ ฅ
tensor([[2., 4.],
[6., 8.]])
tensor([[2., 4.],
[6., 8.]])
์ด๋ฒ์๋ x์ ๊ฐ์ด ๋ฎ์ด์ฐ๊ธฐ ๋์ด 2 ๊ณฑํ๊ธฐ ์ฐ์ฐ์ด ๋ ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
'๋ฅ๋ฌ๋ > Today I learned :' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฅ๋ฌ๋์ ๋ชจ๋ ํต์ฌ ๊ฐ๋ ์ ๋ฆฌ2 (0) | 2022.12.27 |
---|---|
๋ฅ๋ฌ๋์ ๋ชจ๋ ํต์ฌ ๊ฐ๋ ์ ๋ฆฌ1 (0) | 2022.12.27 |
ํ์ดํ ์น ํจํค์ง ๊ธฐ๋ณธ ์กฐ์๋ฒ ์ตํ๊ธฐ 2 - python ํ๋ ฌ, ํ ์ (1) | 2022.12.26 |
ํ์ดํ ์น ํจํค์ง ๊ธฐ๋ณธ ์กฐ์๋ฒ ์ตํ๊ธฐ 1 - ํ ์์ ๊ตฌ์กฐ (0) | 2022.12.26 |
๋ฅ๋ฌ๋ ๋ฏธ๋ถ ํธ๋ฏธ๋ถ ๊ฒฝ์ฌํ๊ฐ๋ฒ (0) | 2022.12.24 |