Skip to main content
Summary

텐서는 PyTorch의 기본 언어입니다

PyTorch에서 데이터는 거의 모두 Tensor로 표현됩니다. 이미지, 문장, 표 데이터뿐 아니라 모델이 학습하는 가중치도 텐서입니다. 그래서 PyTorch를 잘 쓰려면 먼저 "이 데이터는 어떤 모양인가?"를 보는 습관이 필요합니다.

텐서는 숫자를 담는 다차원 배열입니다. 차원 수에 따라 다음처럼 부를 수 있습니다.

import torch

scalar = torch.tensor(3.14)              # 스칼라
vector = torch.tensor([1, 2, 3])         # 벡터
matrix = torch.tensor([[1, 2], [3, 4]])  # 행렬
images = torch.rand(32, 3, 64, 64)       # 고차원 텐서

print(scalar.shape)  # torch.Size([])
print(vector.shape)  # torch.Size([3])
print(matrix.shape)  # torch.Size([2, 2])
print(images.shape)  # torch.Size([32, 3, 64, 64])

스칼라는 숫자 하나라서 모양이 비어 있습니다. 벡터는 한 줄짜리 숫자 묶음입니다. 행렬은 행과 열을 가진 2차원 데이터입니다. 이미지 데이터처럼 더 많은 축이 필요하면 고차원 텐서가 됩니다. 예를 들어 [32, 3, 64, 64]는 보통 "32장의 이미지, 3개 색상 채널, 높이 64, 너비 64"로 읽습니다.

텐서의 기본 개념 익히기

텐서 만들기

가장 직접적인 방법은 torch.tensor()입니다. 파이썬 리스트나 숫자를 텐서로 바꿉니다.

a = torch.tensor([1, 2, 3])
b = torch.tensor([[1, 2, 3], [4, 5, 6]])

처음부터 특정 값으로 채운 텐서를 만들 수도 있습니다.

zeros = torch.zeros(2, 3)  # 2행 3열, 모두 0
ones = torch.ones(2, 3)    # 2행 3열, 모두 1
randoms = torch.rand(2, 3) # 0 이상 1 미만의 랜덤 값

연속된 숫자가 필요할 때는 torch.arange()와 torch.linspace()를 자주 씁니다.

x = torch.arange(0, 10, 2)      # tensor([0, 2, 4, 6, 8])
y = torch.linspace(0, 1, 5)     # 0부터 1까지 5개로 나눔

arange는 시작, 끝, 간격을 기준으로 숫자를 만듭니다. 끝 값은 포함되지 않습니다. linspace는 시작과 끝을 포함해서 지정한 개수만큼 고르게 나눕니다.

텐서 정보를 확인하는 습관

텐서를 만들었다면 바로 정보를 확인해 봅니다. 초보자가 만나는 오류의 상당수는 모양이나 자료형이 맞지 않아서 생깁니다.

t = torch.rand(2, 3)

print(t.shape)   # 텐서의 모양
print(t.dtype)   # 숫자 자료형
print(t.device)  # 저장된 장치
print(t.ndim)    # 차원 수

shape는 텐서의 크기를 알려 줍니다. dtype은 숫자의 종류입니다. 예를 들어 torch.float32는 소수 계산에 많이 쓰이고, torch.int64는 정수 인덱스에 자주 쓰입니다. device는 텐서가 CPU에 있는지 GPU에 있는지 보여 줍니다. 아직 GPU를 쓰지 않았다면 보통 cpu라고 나옵니다. ndim은 차원 수입니다. [2, 3] 모양의 행렬은 2차원입니다.

랜덤 값을 재현 가능하게 만들기

torch.rand()는 실행할 때마다 다른 값을 만듭니다. 실험할 때는 같은 코드를 다시 실행해도 같은 결과가 나와야 비교가 쉽습니다. 이때 torch.manual_seed()를 사용합니다.

torch.manual_seed(42)
a = torch.rand(2, 2)

print(a)

같은 시드 값을 설정하면 같은 순서의 랜덤 값이 만들어집니다. 시드는 랜덤 숫자를 만드는 출발점이라고 생각하면 됩니다. 모델 학습 결과를 비교하거나 예제를 설명할 때 특히 중요합니다.

이번 장에서 기억할 것

텐서는 PyTorch 코드의 기본 단위입니다. 텐서를 만들고, 모양을 보고, 자료형과 장치를 확인하는 습관이 먼저입니다. 앞으로 연산, 데이터셋, 모델, 학습 루프를 배울 때도 계속 텐서를 다룹니다. 코드를 작성하다가 헷갈리면 먼저 shape, dtype, device, ndim을 출력해 보세요. 문제를 찾는 가장 빠른 출발점이 됩니다.

책 목록

초보자를 위한 PyTorch 사용법: 텐서부터 이미지 분류 프로젝트까지

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기