둘다 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로 생성된 것을 볼 수 있다.