[PyTorch] How to use tensor
How to use tensor (feat. PyTorch)
Tensor Broadcasting
같은 shape을 가진 tensor를 +, -연산을 시키는 데에는 어려움이 없을 것이다.
하지만 만약 다른 shape을 가진 tensor끼리 연산을 한다면 어떻게 될까? (2, 2)의 크기의 tensor와 (1, 1)의 크기의 tensor를 합쳤더니 (1, 1)의 크기인 b가 (2, 2)로 확장이 되어 연산이 되었다.
(1, 2)의 크기였던 b가 (2, 2)로 확장이 되어 연산이 되었다.
※주의점
위와 같이 크기가 다른 tensor들이 확장이 되어 연산이 가능하다고 하더라도 해당 기능은 조심해서 사용해야할 필요가 있어 보인다.
우선, 예상치못한 결과 값을 가질 위험성이 높다.
더불어 위의 예시와 다르게 broadcasting이 불가능한 tensor shape들도 존재한다.
※[TIP] view(-1)?
우선 예제를 보고 설명을 해보자. 위에 주어진 초반의 a(이제부터는 a_befor이라고 하겠다.)의 shape는 (4, 2)이다.
view(-1, 4)를 시행시켰더니, (2, 4)로 shape이 변형되었다.
view(-1, 4)는 4를 고정시키고 나머지는 내부 연산에 의해 정해라는 것이다.
즉, D1은 4로 정해진 2-tensor를 만드는 것이므로 내부 연산에 의해 주어진 a_before는 (2, 4)가 된 것이다.
Tensor Manipulation
tensor를 조작하는 방법에 대해 알아보자.
1. View
Returns a new tensor with the same data as the self tensor but of a different shape.
tensor기존의 data를 보존하고 shape를 변경하는 역할을 한다.
※변경되는 shape은 기존의 tensor내부의 원소 수와 호환가능해야 한다.
주어진 tensor a를 view를 이용해 shape을 변경해보자.
우선, a의 shape은 (2, 2)이므로 (1, 4)로 변경해보자. 변경된 tensor a1이 의도대로 (1, 4)로 변경된 것을 알 수 있다.
그렇다면 a를 (5, 2)로 변경한다면 어떻게 될까?
(5, 2)의 경우 5 * 2 = 10개의 원소를 포함하지만 기존의 a의 경우 2 * 2 = 4개의 원소를 포함하므로 호환이 되지 않는다.
그러므로 reshape을 하는데 어려움이 있다.
(4, 2) shape의 tensor를 (2, 2, 2)로 변환시켜보자. tensor의 원소가 배치된 순으로 shape이 변경된 것을 확인할 수 있다.
2. Squeeze
Returns a tensor with all the dimensions of input of size 1 removed.
크기가 1인 차원을 삭제한다.
-
사이즈가 1인 차원이 하나 일때 shape가 (2, 1, 2)였던 Tensor가 (2, 2)로 reshape되었다.
-
사이즈가 1인 차원이 여러개 일때 shape가 (2, 1, 1)이였던 Tensor가 (2)로 reshpe되었다.
-
사이즈가 1인 차원이 없을때 shape가 변하지 않았다.
[TIP]
위의 squeeze예제를 보면 a = a.squeeze()와 같이 out-place operation을 사용할 수 있으나,
in-place operation을 사용할 수 있는 방법 또한 존재한다. 위의 그림과 같이 연산 operation뒤에 _를 붙여주면 in-place operation이 가능하다.
3. Unsqueeze
Returns a new tensor with a dimension of size one inserted at the specified position.
원하는 위치에 크기가 1인 차원을 추가한다.
인덱스가 1인 위치에 크기가 1인 차원을 추가하였다.
4. ones_like
Returns a tensor filled with the scalar value 1, with the same size as input.
input으로 제공된 tensor와 같은 size의 1로 이루어진 tensor를 반환한다.
size가 (2, 3)인 tensor를 매개변수로 전달하였더니 1만으로 이루어진 size가 (2, 3)인 tensor가 반환되었다.
[TIP] ones input으로 제공된 size와 동일한 사이즈의 1로만 이루어진 tensor를 반환한다.
※이와 비슷하게 zeros_like와 zeros가 존재한다.
Reference
02 Pytorch Basic_02.텐서 조작하기 1
02 Pytorch Basic_03.텐서 조작하기 2
PyTorch docs_torch.tensor
PyTorch docs torch
댓글남기기