모델을 정의하고 더미데이터를 넣습니다 왜 넣는 것일까요?
**"더미 데이터(Dummy Data)"**가 왜 필요한지, 아주 직관적인 현실 예시로 딱 정리해 드립니다.
결론부터 말하면, 더미 데이터는 모델에게 길을 찾아주는 게 아니라 **"배관이 잘 연결됐는지 확인하는 물(Water)"**입니다.
1. 비유: 새 정수기 설치 (Plumbing Test)
사용자님이 아주 복잡한 필터가 달린 정수기(모델)를 직접 조립했다고 칩시다.
- 상황: 조립을 다 끝냈습니다. 이제 진짜 마실 물(Real Data)을 넣기 전에 무엇을 하나요?
- 행동: 수돗물을 틀어서 물이 새는 곳은 없는지, 입구랑 출구가 안 막혔는지 먼저 확인하죠?
- 이때의 물 = 더미 데이터: 이 물은 마시려고(정답을 맞추려고) 넣는 게 아닙니다. 그냥 "통과가 되는지(Flow)" 보려고 넣는 겁니다.
2. 코드에서의 역할 (Fact)
dummy_input = torch.randn(...)은 TV 지지직거리는 노이즈 화면 같은 무작위 숫자 덩어리입니다. 이걸 넣는 이유는 딱 3가지를 확인하기 위해서입니다.
A. "구멍 크기"가 맞는지 확인 (Shape Check) - 가장 중요!
만약 아까 classifier 수술할 때 숫자를 잘못 썼다고 가정해 봅시다.
- 모델은 1,280개를 기다리는데, 실수로 1,024개짜리 부품을 끼웠다면?
- 더미 데이터를 넣자마자 **에러(Shape Mismatch)**가 뻥 터집니다.
- 이게 왜 좋냐? 나중에 train.py 돌리다가 1시간 뒤에 에러 나서 멘붕 오는 걸 미리 방지해 줍니다.
B. "장비 위치" 확인 (Device Check)
- 모델은 GPU(cuda)에 있는데, 데이터는 실수로 CPU에 뒀다면?
- 더미 데이터를 넣는 순간 "장치가 다릅니다"라고 에러를 뱉어줍니다.
C. "출력 개수" 확인 (Output Check)
- "4개로 출력해라"라고 시켰는데, 코드를 잘못 짜서 1000개가 나오진 않는지 확인합니다.
하지만 다른 경우도 존재합니다 바로 모델을 onnx화 할때 더미데이터는 전혀 다르게 이용됩니다
결론부터 말씀드리면 "아뇨, 완전히 다릅니다." 비슷해 보이지만, ONNX에서의 더미 데이터는 훨씬 더 결정적이고 필수적인 역할을 합니다.
팩트 위주로 두 가지의 결정적 차이를 구분해 드립니다.
1. PyTorch에서의 역할: "단순 점검 (Check)"
방금 우리가 model.py에서 했던 것은 **"배관 테스트"**입니다.
- 목적: 에러가 나는지 안 나는지 확인.
- 영향: 더미 데이터를 안 넣어도 모델 자체는 존재합니다. 단지 잘 돌아가는지 모를 뿐입니다.
2. ONNX 변환에서의 역할: "지도 제작 (Tracing)"
ONNX를 만들 때(torch.onnx.export) 더미 데이터를 넣는 이유는 **"이 데이터가 지나가는 길을 그대로 본떠서(Trace) 모델 파일을 만들기 때문"**입니다.
파이토치는 코드를 한 줄씩 실행하는 동적(Dynamic) 방식이고, ONNX는 미리 정해진 길만 가는 정적(Static) 방식입니다.
- 상황: 파이토치 코드는 "만약(if) x가 0보다 크면 A로 가고, 아니면 B로 가라"처럼 유연합니다.
- 문제: ONNX는 이런 유연함을 싫어합니다. "딱 정해진 회로도"를 원합니다.
- 해결책 (더미 데이터의 역할):
- 더미 데이터를 실제로 흘려보냅니다.
- 파이토치가 옆에서 지켜보다가 "아, 데이터가 A 경로로 지나가네? 그리고 곱하기를 하고 더하기를 하네?" 하고 그 족적(Trace)을 기록합니다.
- 그 기록된 족적이 바로 .onnx 파일이 됩니다.
[비유] "눈밭에 길 만들기"
- PyTorch (개발 단계):
- 눈 덮인 들판입니다. 어디로든 갈 수 있습니다.
- 더미 데이터는 "내가 지금 밟아도 땅이 안 꺼지나?" 확인해보는 것입니다.
- ONNX (변환 단계):
- 들판에 단단한 시멘트 도로를 깔아야 합니다.
- 그러려면 **누군가(더미 데이터)**가 먼저 한번 걸어가 봐야 합니다.
- 그 사람이 지나간 발자국 모양 그대로 시멘트를 부어서 도로(ONNX 모델)를 만듭니다.
[엔지니어링 팁] 주의할 점
ONNX는 **"지나간 발자국"**만 기억한다고 했죠? 그래서 만약 더미 데이터의 크기(Shape)를 (1, 3, 224, 224)로 고정해서 보내면, 만들어진 ONNX 모델도 **"나는 오직 224 크기만 받겠다"**고 꽉 막힌 모델이 되어버릴 수 있습니다.
그래서 ONNX 변환 코드를 짤 때는 dynamic_axes 라는 옵션을 줘서 **"길 폭(Batch Size)은 유동적으로 해줘"**라고 따로 말해줘야 합니다.
결론
- PyTorch: "고장 났나 확인용" (테스트)
- ONNX: "설계도 그리기용" (필수 재료)
'AI 엔지니어준비' 카테고리의 다른 글
| PyCharm 무료 버전으로 GCP 원격 개발하기 (0) | 2026.02.02 |
|---|---|
| 왜 cv2(OpenCV)를 썼는가? (PIL 대신) (0) | 2026.01.31 |
| 딥러닝의 종류 (0) | 2026.01.30 |
| The Training Standard (0) | 2026.01.30 |
| 머리에 박아둬야 할 것과 검색해서 갖다 써도 되는 (0) | 2026.01.30 |