[PyTorch] torch.Tensor != torch.tensor

merongยท2023๋…„ 3์›” 10์ผ
0

Deep Learning

๋ชฉ๋ก ๋ณด๊ธฐ
1/2

๐Ÿ™„์‚ฌ๊ฑด์˜ ์ „๋ง

์ž์—ฐ์–ด์ฒ˜๋ฆฌ ์Šคํ„ฐ๋””์—์„œ torch.Tensor(n)์€ 1์ฐจ์› n๊ฐœ์˜ ๊ฐ’์„ ๊ฐ–๋Š” ๋žœ๋ค ์‹ค์ˆ˜๊ฐ’(garbage) ํ…์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค๊ณ  ๋ฐฐ์› ์—ˆ๋‹ค
๊ทธ๋Ÿฐ๋ฐ ๋”ฅ๋Ÿฌ๋‹ ๊ณผ๋ชฉ์—์„œ torch.tensor(n)์€ 0์ฐจ์› n์ด๋ผ๋Š” ๊ฐ’์„ ๊ฐ–๋Š” ์Šค์นผ๋ผ ํ…์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์˜€๋‹ค.

๋‘ ๊ฐœ๊ฐ€ ๊ณผ์—ฐ ๋‹ค๋ฅธ ๊ฒƒ์ด๋ž€ ๋ง์ธ๊ฐ€?? ๋ผ๋Š” ์˜์‹ฌ์ด ๋“ค์–ด ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ ์—ญ์‹œ ๋‹ค๋ฅธ ๊ฒƒ์ด์—ˆ๋‹ค!
๊ฝค ์‚ฌ์†Œํ•œ ์ฐจ์ด๋ผ ์•ž์œผ๋กœ ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„ ํ™•์‹คํžˆ ์ •๋ฆฌํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

์ฐจ์ด์ 

1. Class vs Function

๋‘˜ ๋‹ค tensor๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.
๊ทธ๋Ÿฌ๋‚˜..
torch.Tensor()๋Š” Class , torch.tensor()๋Š” Function์ด๋‹ค.
pytorch.org์— ๋“ค์–ด๊ฐ€ ๋ณด๋ฉด Tensor์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ๋ฉ”์†Œ๋“œ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ... torch.tensor()๋ฅผ ํ†ตํ•ด์„œ๋„ Transpose์™€ ๊ฐ™์€ ๋ฉ”์†Œ๋“œ๋ฅผ ์ ์šฉํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

2. int ์ž…๋ ฅ์‹œ

torch.Tensor๋Š” int ์ž…๋ ฅ์‹œ float(32) ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ,
torch.tensor๋Š” int ์ž…๋ ฅ์‹œ int ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

3. tensor ์ž…๋ ฅ์‹œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„ ์‚ฌ์šฉ์˜ ์ฐจ์ด

torch.Tensor๋Š” tensor ์ž…๋ ฅ์‹œ ์ž…๋ ฅ ๋ฐ›์€ ๋ฐ์ดํ„ฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. (์–•์€ ๋ณต์‚ฌ)
torch.tensor๋Š” ๋ชจ๋“  ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋ณต์‚ฌ(๊นŠ์€ ๋ณต์‚ฌ) ํ›„ ์‚ฌ์šฉํ•œ๋‹ค.

#torch.Tensor์— tensor๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

original_data = torch.Tensor([1])
new_data = torch.Tensor(original_data)
print(f"original : {original_data} new : {new_data}")
 
# original data๋ฅผ ์ˆ˜์ •
original_data[0] = 2
print(f"original : {original_data} new : {new_data}")


>>> original : tensor([1.]) new : tensor([1.])
    original : tensor([2.]) new : tensor([2.]) #์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•˜๋‹ˆ ๋ณต์‚ฌํ•œ ๊ฒƒ๋„ ์ˆ˜์ •๋จ.

๐Ÿ”ด ๋‹จ, list, numpy ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด torch.tensor()์™€ ๋™์ผํ•˜๊ฒŒ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉํ•œ๋‹ค. tensor ์ž…๋ ฅ๋งŒ ์กฐ์‹ฌํ•˜์ž!

# torch.torch์— tensor๋ฅผ ์ž…๋ ฅํ•ด๋ณด์ž.

original_data = torch.tensor([1])
new_data = torch.tensor(original_data)
print(f"original : {original_data} new : {new_data}")

# data๋ฅผ ์ˆ˜์ •ํ•˜์ž
original_data[0] = 2
print(f"original : {original_data} new : {new_data}")

>>> original : tensor([1]) new : tensor([1])
    original : tensor([2]) new : tensor([1]) #์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •ํ•ด๋„ ์ด๋ฏธ ๋ณต์‚ฌ๋ฅผ ์™„๋ฃŒํ•˜์—ฌ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์Œ

4. torch.Tensor์˜ ๋žœ๋ค ์ดˆ๊ธฐํ™” ๊ธฐ๋Šฅ

์•„๋ฌด ๊ด„ํ˜ธ ์—†์ด ์‰ผํ‘œ๋กœ ์ฐจ์›์„ ๊ตฌ๋ถ„ํ•˜์—ฌ shape์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๊ทธ์— ๋”ฐ๋ผ์„œ float ํ˜•์œผ๋กœ ๋žœ๋คํ•˜๊ฒŒ ํ…์„œ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.
๊ทธ๋ž˜์„œ ์ฃผ์˜ํ•ด์ค˜์•ผ ํ•  ์ ์ด torch.Tensor๋Š” tensor๋กœ ๋ณ€ํ™˜๋  input data๋กœ ์Šค์นผ๋ผ๊ฐ’์„ ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ๋งจ ์•ž์˜ ์‚ฌ๊ฑด์˜ ์ „๋ง์ฒ˜๋Ÿผ torch.Tensor(n)์„ ํ•ด์ฃผ๋ฉด 1์ฐจ์› n๊ฐœ์˜ ์š”์†Œ๋ฅผ ๊ฐ€์ง„ ๋žœ๋ค ์ดˆ๊ธฐํ™” ํ…์„œ๊ฐ€ ํƒ„์ƒํ•˜๊ฒŒ ๋œ๋‹ค.
torch.Tensor๋ฅผ ํ†ตํ•ด tensor๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด..list, array ํ˜•์œผ๋กœ ์ž…๋ ฅํ•ด์ฃผ์‹œ๊ธธ...

x=torch.Tensor(2,3)

print(x.type())
print(x.shape)
print(x)

>>> torch.FloatTensor
	torch.Size([2, 3])
	tensor([[1.1138e-34, 0.0000e+00, 1.0009e-34],
        	[0.0000e+00, 8.9683e-44, 0.0000e+00]])

โœ… ๋žœ๋คํ•˜๊ฒŒ ์ดˆ๊ธฐํ™”ํ•œ ํ…์„œ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•œ๋‹ค.
1) torch.empty(m,n) == torch.Tensor(m,n) #์‹ค์ˆ˜๋ฒ”์œ„ ์ „์ฒด
2) torch.rand(m,n) #๊ท ๋“ฑ ๋ถ„ํฌ [0,1)
3) torch.randn(m,n) #ํ‘œ์ค€ ์ •๊ทœ ๋ถ„ํฌ (ํ‰๊ท ์ด 0 ์ด๊ณ , ํ‘œ์ค€ํŽธ์ฐจ๊ฐ€ 1์ธ ๐Ÿ”” ๋ชจ์–‘ ๊ทธ ๊ทธ๋ž˜ํ”„ ์•„์‹œ์ฃ ?)

๊ฒฐ๋ก 

์–ด๋– ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ tensor ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋˜๋„๋ก torch.tensor()๋ฅผ ์ด์šฉํ•˜๋„๋ก ํ•˜์ž.




์ฐธ๊ณ 
profile
๋งค์ผ๋งค์ผ์ด ์ƒˆ๋กœ์šด ์‹œ์ž‘์ 

0๊ฐœ์˜ ๋Œ“๊ธ€