in-place 연산이란?
in-place 연산은 원본 데이터 구조를 직접 수정하여 별도의 복사본을 만들지 않는 연산 방식을 가리킴.
- 메모리 효율성이 높지만,
- 원본 데이터가 변경된다는 점을 주의해야 함.
주의할 점은 in-place 연산을 사용할 때 자동 미분(autograd)에서 문제가 발생할 수 있음.
requires_grad=True
인 텐서에 대해 in-place 연산을 수행하면- 계산 그래프가 올바르게 유지되지 않을 수 있으므로 주의해야 함.
autograd를 사용할 때는 in-place 연산을 피해야 함.
즉, 모델 학습 중에는 in-place 연산을 사용하지 말 것.
PyTorch에서의 in-place 연산
PyTorch에서는 method 이름 끝에 언더스코어(_
)를 붙여 in-place operation 임을 표시
- PyTorch에서는 다양한 in-place 연산이 있고 이러한 연산들은 보통 메소드 이름 끝에 언더스코어(
_
)를 붙여 표시함. - 이는 새로운 텐서를 생성하지 않고 기존 텐서를 직접 수정한다는 것을 의미.
PyTorch의 주요 in-place 연산들은 다음과 같음:
1. 산술 연산:
tensor.add_(value) # 더하기
tensor.sub_(value) # 빼기
tensor.mul_(value) # 곱하기
tensor.div_(value) # 나누기
2. 초기화 연산:
tensor.fill_(value) # 모든 요소를 특정 값으로 채우기
tensor.zero_() # 모든 요소를 0으로 초기화
tensor.ones_() # 모든 요소를 1로 초기화
3. 변형 연산:
tensor.abs_() # 절대값 취하기
tensor.neg_() # 부호 반전
tensor.sqrt_() # 제곱근 계산
tensor.pow_(exponent) # 거듭제곱 계산
4.차원 변환:
tensor.transpose_(dim0, dim1) # 차원 전치
tensor.squeeze_(dim) # 크기가 1인 차원 제거
tensor.unsqueeze_(dim) # 새 차원 추가
5. 인덱싱 기반 연산:
tensor.index_fill_(dim, indices, value) # 특정 인덱스의 요소 채우기
tensor.scatter_(dim, index, src) # 특정 위치에 값 분산
6. 연산자 오버로딩 (Augmented Assignment):
tensor += value # in-place 더하기
tensor -= value # in-place 빼기
tensor *= value # in-place 곱하기
tensor /= value # in-place 나누기
참고: NumPy의 인플레이스 연산
NumPy에서는 PyTorch와 달리 _
를 사용하지 않고 in-place 연산을 제공:
# NumPy의 in-place method
arr = np.array([1, 2, 3])
arr.fill(5) # arr은 이제 [5, 5, 5]
# 연산자를 통한 인플레이스 연산
arr += 2 # arr은 이제 [7, 7, 7]
'Python' 카테고리의 다른 글
[Ex] Numeric Datatype 다음의 연산들의 결과를 구해보고 그 이유를 설명해보라. (0) | 2025.03.17 |
---|---|
[PyTorch] dtype 단축메서드로 바꾸기 (0) | 2025.03.14 |
[PyTorch] flattenning - Tensor's methods (0) | 2025.03.13 |
[PyTorch] 생성 및 초기화, 기본 조작 (0) | 2025.03.13 |
[Ex] PySide6 (0) | 2025.03.11 |