Pytorch로 시작하는 딥러닝 입문(02-03 텐서 조작하기)

2024. 2. 2. 07:14딥러닝 모델: 파이토치

♣ 텐서 초기화

1. 지정된 값으로 초기화

 

2. 랜덤한 값으로 초기화

 

3. Numpy array로부터 초기화 

 

♣ Tensor 데이터의 형식 지정

1. 정수(int)

torch.int8, torch.int16, torch.int32, torch.int64(=torch.long)

torch.uint8: 양의 정수 0~225 숫자만 포함. 주로 이미지 데이터를 다룰 때 사용

 

2. 소수(float)

torch.float16, torch.float32, torch.float64

 

3. boolean

torch.bool

 

다른 데이터 타입으로 변경할 수도 있다. 

 

 

♣ 다른 Device로 Tensor 옮기기

당연히 "cpu"로도 옮길 수 있다. 

 

♣ 인덱싱

 

 

♣ view

파이토치 텐서의 view는 numpy에서의 reshape와 같은 역할을 함. 텐서의 크기(shape)를 변경해주는 역할. 

원소의 수는 유지하면서 텐서의 크기를 변경한다. 

 

 

3차원 텐서를 2차원 텐서로 변경하기

 

 

view의 규칙 정리

1. 변경 전과 변경 후의 텐서 안의 원소 개수가 유지되어야 함

2. 사이즈가 -1로 설정되면 다른 차원으로부터 해당 값을 유추함. 

 

변경 전 텐서의 원소 수는 (2×2 ×3)=12개였으며 변경 후 텐서의 원소 개수 또한 (4 ×3)=12개임

 

 

3차원 텐서의 크기 변경

3차원 텐서에서 3차원 텐서로 차원은 유지하되, 크기를 바꿀 수 있음.

 

 

♣ squeeze

차원이 1인 경우에 해당 차원을 제거하는 기능을 함. 

2차원 텐서 만들기

 

해당 텐서는 (3×1) 크기를 가지는데, 두 번째 차원이 1이므로 squeeze를 사용하면 (3, )의 크기를 가지는 텐서로 변경됨

1이었던 두 번째 차원이 제거되면서 (3,) 의 크기를 가지는 텐서로 변경되어 1차원 벡터가 됨(여기서는 크기가 1×3과 같음)

 

♣ unsqueeze

squeeze와 반대로 특정 위치에 1인 차원을 추가함. 

 

위의 결과는 unsqueeze와 view가 동일한 결과를 만들 수 있다는 것을 보여줌. 

unsqueeze의 인자로 1을 넣어서 두 번째 차원에 1 추가하기

 

 

unsqueeze의 인자로 -1 넣어서 마지막 차원에 1인 차원 추가하기

 

view, squeeze, unsqueeze는 텐서의 원소 수는 그대로 유지하면서 모양과 차원을 조절함. 

 

 

♣ 타입 캐스팅(Type Casting)

텐서에는 자료형이라는 것이 있음. 각 데이터형별로 정의되어 있음

 

이러한 자료형을 변환하는 것을 타입캐스팅이라고 함

 

 

 

♣ 연결하기(concatenate)

두 텐서를 연결하는 방법 알아보기

 

 

♣ 스택킹(Stacking)

연결하는 또 다른 방법인 stacking. 영어로는 쌓는다는 의미임. 

concatenate보다 stacking이 더 많은 연산을 포함하고 있음. 

 

스택킹은 많은 연산을 한 번에 축약하고 있음. 위의 작업은 아래의 코드와 동일한 작업임

 

 

 

♣ ones_like, zeros_like: 0으로 채워진 텐서와 1로 채워진 텐서

 

 

♣ In-place Operation(덮어쓰기 연산)

곱하기를 했어도 그 값을 x에 저장한 것이 아니므로 x를 출력하면 기존의 값이 출력됨

 

하지만 연산 뒤에 _를 붙이면 기존의 값을 덮어쓰기 할 수 있음

 

 

♣ 참고자료

https://wikidocs.net/52846

 

02-03 텐서 조작하기(Tensor Manipulation) 2

이어서 텐서를 조작하는 방법을 알아보겠습니다. #### 4) 뷰(View) - 원소의 수를 유지하면서 텐서의 크기 변경. 매우 중요! 파이토치 텐서의 뷰(View)는 넘파이에서…

wikidocs.net