머신러닝 프레임워크비교
| topics | 100-데이터분석 & AI 101 머신러닝 102 딥러닝 |
| types | 레퍼런스 |
| tags |
| 구분 | PyTorch | TensorFlow | Keras |
|---|---|---|---|
| 개발사 | 원래 독립, 현재는 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 + b, torch.matmul(a, b) |
a + b, tf.matmul(a, b) |
| 사용 목적 | 연구, 실험, 빠른 프로토타입 | 대규모 배포, 다양한 플랫폼 지원 |
데이터 준비 과정
PyTorch
- Numpy array 준비
- 데이터를 numpy 배열로 준비
- Tensor로 변환
torch.tensor()또는torch.from_numpy()로 numpy array를 tensor로 변환
- TensorDataset 생성
- 여러 tensor를 묶어서
TensorDataset객체 생성
- 여러 tensor를 묶어서
- DataLoader 생성
DataLoader로 배치, 셔플 등 데이터 로딩 옵션 지정
TensorFlow
- Numpy array 준비
- 데이터를 numpy 배열로 준비
- tf.data.Dataset 생성
tf.data.Dataset.from_tensor_slices()로 numpy array에서 바로 Dataset 생성- Tensor 변환을 명시적으로 하지 않아도 내부적으로 자동 변환됨.
- 배치, 셔플 등 파이프라인 구성
.batch(),.shuffle(),.map()등 메서드로 데이터 파이프라인 구축