torch.rand(shape)
: 0 ~ 1 사이의 연속균등분포에서 추출한 난수로 채워진 tensor를 반환한다.torch.randn(shape)
: 표준정규분포(mean = 0, std = 1)에서 추출한 난수로 채워진 tensor를 반환한다.초기화가 이루어지지 않았다는 것은 Tensor의 요소가 특정 값으로 설정되지 않았다는 뜻이다.
그렇기 때문에 Tensor에 할당하는 메모리에 존재하는 임의의 값들로 채워진다.
torch.empty(shape)
: 초기화 되지 않은 Tensor를 shape의 크기로 생성하여 반환torch.fill_(num)
: 초기화 되지 않은 Tensor를 num값으로 채운다. 메모리주소 변경 Xtorch.from_Numpy(numpy_data)
: numpy 데이터로부터 Tensor를 생성하여 반환한다.
torch.from_Numpy(numpy_data).float()
: Numpy로부터 생성된 Tensor는 기본적으로 정수형이므로 실수형으로 타입 캐스팅이 필요하다.
test_tensor.clone()
: test_tensor를 복사하여 새로운 메모리에 할당한 Tensor를 반환한다. 반환한 Tensor는 기존 Tensor의 계산 그래프에 연결되어있다.test_tensor.detach()
: test_tensor를 복사하지만 기존의 Tensor의 계산 그래프에서는 분리되어있다. 원본 Tensor와 메모리 주소를 공유하기 때문에 하나의 값이 변경되면 같이 변경된다.test_tensor.detach().clone()
: 원본 Tensor의 계산 그래프와 분리되고 새로운 메모리에 할당된 Tensor를 반환한다. 가장 많이 사용되는 방식이며, detach()
를 먼저 하는 것이 clone()
을 먼저 하는 것보다 근소하게 빠르다.test_tensor.view(shape)
: 기존 Tensor와 메모리 주소를 공유하며, 기존 Tensor의 메타데이터인 stride를 변경하여 반환한다. 하지만 test_tensor의 메모리가 연속적으로 할당된 경우(contiguous 만족) 사용이 가능하다. test_tensor.reshape(shape)
: 기본적으로 기존 Tensor의 view를 반환하려하며, contiguous가 만족하지 않아 반환불가시, contiguous한 Tensor로 복사하여 view를 반환한다.reshape
는 안전하게 형태를 바꿔주고, view
는 기존 Tensor와 메모리가 공유되어 업데이트에 대한 보장이 이루어진다. 단, continguous하지 않은 경우 에러 발생 가능test_tensor.transpose(dim1, dim2)
: test_tensor의 dim1과 dim2 차원을 서로 바꾼 Tensor를 반환test_tensor.permute()
: test_tensor의 모든 차원을 입력된 순서대로 재배치한다.torch.cat((b, c), dim=num)
: b와 c Tensor를 입력된 차원을 기준으로 연결하여 반환한다.torch.stack((b, c), dim=num)
: b와 c Tensor를 입력된 차원으로 새로운 차원을 생성하여 Tensor들을 결합해 반환한다.test_tensor.expand(3, -1, -1)
: 확장하고자 하는 차원의 크기가 1이여야지 확장이 가능하다. -1은 기존의 차원 크기를 그대로 유지하겠다는 의미이다. 확장된 Tensor를 반환한다.test_tensor.repeat(3, 4)
: Tensor의 일부 차원이 1이여야 한다는 제약이 없다. 그러나 추가 메모리를 할당하기 때문에 expand
에 비해서 메모리 효율성이 떨어진다. dim = 0축으로 3번 반복하고, dim = 1축으로 4번 반복한 Tensor를 반환한다.알고 있던 내용이라고 생각했지만 그 이유와 동작원리에 대해서 생각해보면 제대로 알지 못했던 것이 너무 많았다. 이번 기회를 통해서 확실하게 짚고 넘어가는 계기를 가질 수 있어서 다행이다.