# 3x4 크기의 모든 요소가 0인 텐서 생성
zero_tensor = torch.zeros(3, 4)
print(zero_tensor) # 출력: tensor([[0., 0., 0., 0.],
# [0., 0., 0., 0.],
# [0., 0., 0., 0.]])
# 2x2 크기의 모든 요소가 1인 텐서 생성
one_tensor = torch.ones(2, 2)
print(one_tensor)
random_tensor = torch.rand(2, 3)
print(random_tensor) # 출력: 0과 1 사이의 랜덤 값으로 채워진 2x3 텐서
normal_tensor = torch.randn(2, 3)
print(normal_tensor) # 출력: 평균 0, 표준편차 1을 가지는 랜덤 값으로 채워진 2x3 텐서
x = torch.randn(2, 3)
zero_like_x = torch.zeros_like(x)
print(zero_like_x.shape) # 출력: torch.Size([2, 3]) # x와 동일한 shape
one_like_x = torch.ones_like(x)
print(one_like_x) # 출력: tensor([[1., 1., 1.],
# [1., 1., 1.]])
arange_tensor = torch.arange(0, 10, 2)
print(arange_tensor) # 출력: tensor([0, 2, 4, 6, 8])
empty_tensor = torch.empty(2, 3)
print(empty_tensor) # 출력: 임의의 값으로 채워진 2x3 텐서 (매번 실행 시 값이 다름)
x = torch.empty(2, 3)
x.fill_(5) # 모든 요소를 5로 채움
print(x) # 출력: tensor([[5., 5., 5.],
# [5., 5., 5.]])
import numpy as np
# 리스트를 텐서로 변환
list_data = [1, 2, 3]
tensor_from_list = torch.tensor(list_data)
print(tensor_from_list) # tensor([1, 2, 3])
# NumPy 배열을 텐서로 변환
numpy_array = np.array([4, 5, 6])
tensor_from_numpy = torch.tensor(numpy_array)
print(tensor_from_numpy) # tensor([4, 5, 6])
import numpy as np
# NumPy 배열을 텐서로 변환 (메모리 공유)
numpy_array = np.array([1, 2, 3])
tensor_from_numpy = torch.from_numpy(numpy_array)
# 텐서의 값 변경
tensor_from_numpy[0] = 10
# NumPy 배열의 값도 변경된 것을 확인
print(numpy_array) # [10 2 3]
int_tensor = torch.IntTensor([1, 2, 3])
print(int_tensor) # 출력: tensor([1, 2, 3], dtype=torch.int32)
if torch.cuda.is_available():
cuda_tensor = cpu_tensor.to('cuda')
print(cuda_tensor.device) # 출력: cuda:0 (GPU 사용 가능 여부에 따라 달라짐)
to(device='cpu')
또는 cpu()
로 GPU에 할당된 텐서를 CPU 텐서로 변환 가능detach()
와 달리 텐서를 그래프에서 제외시키지 않음x = torch.randn(2, 2)
x_clone = x.clone()
print(x_clone.equal(x)) # 출력: True (두 텐서가 완전히 같음)
x_detached = x.detach()
print(x_detached.requires_grad) # 출력: False (gradient 계산 불가)
하지만 detach 메서드는 텐서를 복사하지만 복사 대상 텐서와 메모리를 공유합니다. 따라서 기존 텐서의 값이 변하면 복사한 텐서의 값도 따라서 변하게 됩니다. 다만, back-propagation을 위한 기울기 계산 그래프에서 제외되죠. 먼저 clone 메서드부터 보겠습니다.