머신러닝 프레임워크비교

topics 100-데이터분석 & AI 101 머신러닝 102 딥러닝
types 레퍼런스
tags
구분 PyTorch TensorFlow Keras
개발사 Facebook Google 원래 독립, 현재는 TensorFlow에 통합
API 수준 저수준(직접 제어, 유연함) 고수준+저수준(둘 다 제공) 고수준(간단, 직관적)
코드 스타일 Pythonic, 직관적, 동적 그래프 복잡, 정적 그래프(2.x부터 동적 지원) 매우 간단, 초보자 친화적
주요 장점 연구, 실험, 디버깅, 빠른 프로토타이핑 대규모 서비스, 배포, 최적화, 다양한 플랫폼 빠른 개발, 쉬운 문법, 학습용으로 적합
주요 단점 대형 배포, 상용화 지원 약간 부족 복잡한 구조, 디버깅 어려움(저수준은 유연) 세밀한 제어 어려움, 복잡한 모델 구현 한계
사용처 연구, 최신 논문, 실험 산업, 상용 서비스, 대규모 프로젝트 입문, 교육, 프로토타입, 간단한 모델
배포 TorchScript, ONNX 등 지원 TensorFlow Serving, Lite, JS 등 강력 TensorFlow와 연동해 배포
관계 독립 프레임워크 Keras를 공식 고수준 API로 포함 TensorFlow의 고수준 API (tf.keras)로 통합

텐서 비교

구분 PyTorch Tensor TensorFlow Tensor
생성 방법 torch.tensor()torch.zeros(), 등 tf.constant()tf.Variable()tf.zeros(), 등
데이터 타입 다양한 dtype 지원 (float32, int64 등) 다양한 dtype 지원 (float32, int32 등)
기본 연산 방식 Pythonic, 동적 계산 그래프 (Define-by-Run) 정적 계산 그래프(Define-and-Run, 2.x부터 동적 지원)
GPU 지원 기본적으로 GPU 사용 가능 명시적으로 device 지정 필요
메모리 연산 in-place 연산 지원 (add_() 등) in-place 연산 제한적 (assign() 등)
주요 속성 .shape.dtype.device.requires_grad .shape.dtype.device.numpy()
연산 예시 a + btorch.matmul(a, b) a + btf.matmul(a, b)
사용 목적 연구, 실험, 빠른 프로토타입 대규모 배포, 다양한 플랫폼 지원

데이터 준비 과정

PyTorch

  1. Numpy array 준비
    • 데이터를 numpy 배열로 준비
  2. Tensor로 변환
    • torch.tensor() 또는 torch.from_numpy()로 numpy array를 tensor로 변환
  3. TensorDataset 생성
    • 여러 tensor를 묶어서 TensorDataset 객체 생성
  4. DataLoader 생성
    • DataLoader로 배치, 셔플 등 데이터 로딩 옵션 지정

TensorFlow

  1. Numpy array 준비
    • 데이터를 numpy 배열로 준비
  2. tf.data.Dataset 생성
    • tf.data.Dataset.from_tensor_slices()로 numpy array에서 바로 Dataset 생성
    • Tensor 변환을 명시적으로 하지 않아도 내부적으로 자동 변환됨.
  3. 배치, 셔플 등 파이프라인 구성
    • .batch().shuffle().map() 등 메서드로 데이터 파이프라인 구축

관련 문서