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를 반환한다.알고 있던 내용이라고 생각했지만 그 이유와 동작원리에 대해서 생각해보면 제대로 알지 못했던 것이 너무 많았다. 이번 기회를 통해서 확실하게 짚고 넘어가는 계기를 가질 수 있어서 다행이다.