개요
텐서(Tensor)는 PyTorch에서 데이터를 표현하고 연산을 수행하는 핵심 단위이다. GPU를 활용한 고속 연산이 가능하며, Numpy 배열과 유사한 구조로 쉽게 다룰 수 있다. 이번 포스팅에서는 텐서의 생성부터 다양한 조작 방법까지 단계별로 살펴본다.
텐서 생성하기
필요한 라이브러리 불러오기
먼저 PyTorch와 Numpy 라이브러리를 불러온다.
import torch
import numpy as np
빈 텐서 생성
torch.empty 함수를 사용하면 초기화되지 않은 텐서를 생성할 수 있다.
x = torch.empty(5, 4) # 5x4 크기의 빈 텐서 생성
print(x)
다양한 텐서 생성 방법
모든 요소가 1인 텐서
ones_tensor = torch.ones(3, 3) # 3x3 크기의 모든 요소가 1인 텐서
print(ones_tensor)
모든 요소가 0인 텐서
zeros_tensor = torch.zeros(2) # 길이 2의 벡터
print(zeros_tensor)
랜덤 값으로 채워진 텐서
rand_tensor = torch.rand(5, 6) # 5x6 크기의 랜덤 텐서
print(rand_tensor)
리스트와 Numpy 배열을 텐서로 변환하기
리스트에서 텐서로 변환
lst = [13, 4]
tensor_from_list = torch.tensor(lst)
print(tensor_from_list)
Numpy 배열에서 텐서로 변환
arr = np.array([4, 56, 7])
tensor_from_np = torch.tensor(arr)
print(tensor_from_np)
또는 특정 타입의 텐서를 생성할 수도 있다.
float_tensor = torch.FloatTensor(arr)
print(float_tensor)
텐서의 크기와 타입 확인하기
x = torch.rand(5, 4)
print(x.size()) # 텐서의 크기 출력
print(x.shape) # 텐서의 크기 출력 (size와 동일)
print(x.size()[1]) # 두 번째 차원의 크기 출력
print(type(x)) # 텐서의 타입 확인
텐서 덧셈 연산
텐서 간의 덧셈은 여러 방법으로 수행할 수 있다.
x = torch.rand(2, 2)
y = torch.rand(2, 2)
print("x:\n", x)
print("y:\n", y)
# 방법 1: + 연산자 사용
print("x + y:\n", x + y)
# 방법 2: torch.add 함수 사용
print("torch.add(x, y):\n", torch.add(x, y))
# 방법 3: y에 x 더하기 (in-place 연산 아님)
y_add = y.add(x)
print("y.add(x):\n", y_add)
# 방법 4: y에 x 더하기 (in-place 연산)
y.add_(x)
print("y.add_(x):\n", y)
PyTorch에서 인-플레이스(in-place) 연산은 기존의 텐서를 직접 수정하여 메모리를 절약하고 연산 속도를 높이는 방법이다. 일반적인 연산은 새로운 텐서를 생성하여 결과를 반환하지만, 인-플레이스 연산은 원본 텐서를 변경하여 추가적인 메모리 할당을 피한다.
텐서의 크기 변환 (Reshape)
view 메서드를 사용하여 텐서의 형태를 변경할 수 있다.
x = torch.rand(8, 8)
print("Original size:", x.size())
# 1차원으로 변환
a = x.view(64)
print("Reshaped to:", a.size())
# 다차원으로 변환 (-1은 자동 계산)
b = x.view(-1, 4, 4)
print("Reshaped to:", b.size())
주의: view 메서드에서 -1은 자동으로 크기를 결정하므로, 한 번만 사용할 수 있다. 예를 들어, x.view(-1, -1, 4)는 오류를 발생시킨다.
텐서를 Numpy 배열로 변환하기
x = torch.rand(8, 8)
y = x.numpy()
print(y)
print(type(y))
단일 텐서에서 값 추출하기
텐서에 저장된 단일 값을 파이썬의 기본 숫자 타입으로 변환할 수 있다.
loss = torch.ones(1)
print(loss) # 텐서 출력
print(loss.item()) # 텐서에서 값 추출
item() 메서드는 텐서에 단일 값이 저장되어 있을 때 이를 파이썬의 숫자 타입으로 변환해준다. 예를 들어, 손실 함수의 결과와 같이 단일 값일 때 유용하게 사용된다.
참고
[파이토치] 실전 인공지능으로 이어지는 딥러닝 - 기초부터 논문 구현까지 강의 | 딥러닝호형 -
데이터 불러오기(Data Loader)
www.inflearn.com
'AI > 개념' 카테고리의 다른 글
혼동행렬(confusion matrix)이란 무엇인가? (0) | 2025.02.05 |
---|---|
PyTorch 역전파(Backpropagation) 이해하기, 자동 미분과 최적화 (1) | 2025.01.25 |
최적화 (Optimization)와 목적 함수(Objective Function)과 하강법 (Descent Method) (1) | 2024.10.14 |
손실 함수와 회귀(Regression) (0) | 2024.10.07 |
활성화 함수(Activation Function)와 종류 (2) | 2024.10.03 |