둘다 data
(input)에 대해서 Tensor 객체
로 만들어 주는 기능은 동일하다.
하지만 의미적으로나 구조적으로 차이점이 있다.
우선 Docs를 보자
pythorch 공식문서에 tensor를 검색해보면 tensor
, Tensor
2가지를 볼 수 있다.
기본적인 차이는
tensor.torch()
: function tensor.Torch()
: class이라는 것이다.
torch.tensor(data)
-> Tensor
로 data
를 input으로 받아 Tensor
객체를 생성하게 된다.
주의할 점에는 torch.tensor
는 항상 data
를 복사한다고 되어 있다.
이에 따라 data
는 torch.tensor(data)
의 필수 argument 이기 때문에
data를 넣지 않으면 TypeError
가 발생하게 된다.
torch.Tensor
은 Class이다.
이미 존재하는 데이터를 tesor로 바꾸고 싶을 때 torch.tenseor()
를 사용하라고 한다.
이는 torch.tenseor()
는 Tesor 객체를 만들어주는 함수로 생각하라는 의미로 받아들이면 될 것 같다.
또한 빈 Tensor 객체를 만들기 위해 사용할 수 있다.
torch.tensor
int
입력시 int
그대로 입력Tensor 객체
생성 (call by value
)torch.Tensor
int
입력시 float
으로 변환Tensor 객체
로) 입력 받은 메모리 공간을 그대로 사용 (call by reference
)list
나 numpy
로) 입력 받은 값을 복사하여 Tensor 객체
생성(call by value
)코드로 보면 이해하기 쉽다.
# 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.])
int
가 float
형으로 바뀐 것을 볼 수 있다
input이 Tensor객체
인 경우 original Tensor 값을 변경하니 new Tensor 값도 덩달아 바뀐 것을 볼 수 있다
call by reference
나 얕은복사(shallow copy)
개념을 보면 될 것이다.# torch.Tensor은 list나 numpy를 받으면 값을 복사해온다
original_data = [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 : [1] new : tensor([1.])
original : [2] new : tensor([1.])
list
나 numpy
인 경우, original list 값을 변경해도, new Tensor의 값은 바뀌지 않은 것을 볼수 있다.call by value
나 깊은복사(deep copy)
개념을 보면 될 것이다.# 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])
int
로 받아 int
로 생성된 것을 볼 수 있다.