[예제 4-1] CIFAR-10 데이터를 이용해 MLP 설계하기
#1: PyTorch 모듈 중 인공 신경망 모델을 설계하는데 필요한 함수를 모아둔 모듈
#2: 'torch.nn' 모듈 중에서도 자중 이용되는 함수 'F' 지정
#3: 컴퓨터 비전 연구 분야에서 자주 이용되는 'torchvision' 모듈 내의 'transforms', 'datasets' 함수 임포트
GPU 사용(계산속도가 빠르기 때문에 딥러닝 모델의 파라미터 값을 빠르게 업데이트 가능)
BATCH_SIZE = 32 : Mini-batch 1개 단위에 대해 데이터가 32개로 구성
EPOCHS : 존재하고 있는 Mini-batch를 전부 이용하는 횟수
CIFAR10 데이터 다운로드
transform
- MLP의 Input으로 이용되기 때문에 ToTensor() 메서드 이용해 Tensor 형태로 변경
- 또한, 한 픽셀은 0~255 범위의 스칼라 값으로 구성 -> 이를 0~1 범위로 정규화
shuffle
- 데이터의 순서를 섞고자 할 때 이용
- 특정 Label에 매칭된 이미지 데이터의 특징을 보고 학습하는 것이 O
- 특정 이미지 데이터에 매칭된 Label 값만을 집중적으로 학습 X
X_train
- 3개의 이미지 데이터가 1개의 Mini-Batch 구성
- 가로 32개, 세로 32개의 픽셀로 구성
- 채널 3개(Red , Green, Blue) - 컬러 이미지
y_train : 32개의 이미지 데이터 각각에 대해 Label 값이 1개씩 존재
#1: 딥러닝 모델 관련 기본 함수를 포함하고 있는 nn.Module 클래스를 상속받는 Net 클래스 정의
#2: CIFAR-10 이미지 데이터 Input를 위해 32*32*3 크기의 노드 수 설정
#3: CIFAR-10 Dataset은 총 10가지 클래스로 구성 -> Output의 노드 수 10개
#4: MLP 모델은 1차원의 벡터 값을 입력을 받을 수 있음(2차원 -> 1차원)
#1: 'DEVICE' 장비를 이용해 MLP 모델을 완성하기 위한 것
#2: Back Propagation을 통해 파라미터를 업데이트 할 때 이용하는 옵티마이저 정의(Adam)
#3: MLP 모델의 output 값과 원-핫 인코딩 값과의 Loss는 CrossEntropy 이용해 계산
#1: 기존에 정희한 MLP 모델을 학습 상태로 지정
#2: 해당 train_loader 내에 Mini-Batch 단위로 저장된 데이터를 순서대로 이용해 MLP 모형 학습
#3: Mini-Batch 내에 있는 이미지 데이터를 기존에 정의한 장비에 할당
#4: Mini-Batch 내에 있는 이미지 데이터와 매칭된 레이블 데이터도 기존에 정의한 장비에 할당
#5: Optimizer의 Gradient 초기화
#6: 장비에 할당한 이미지 데이터를 MLP 모델의 Input으로 이용해 Output 계산
#7: CrossEntropy를 이용해 Loss값 계산
#8: Loss 값을 계산한 결과를 바탕으로 Back Porpagation을 통해 계산된 Gradient 값을 각 파라미터에 할당
#9: 각 파라미터별로 할당된 Gradient 값을 이용해 파라미터 값 업데이트
#1: MLP 모델을 평가 상태로 지정
#2: test_loader 내에 있는 데이터를 이용해 Loss 값을 계산하기 위해 test_loss를 0으로 임시 설정
#3: MLP 모델이 올바른 Class로 분류한 경우를 세기 위해 correct = 0으로 임시 설정
#4: MLP 모델을 평가하는 단계에서는 Gradient를 통해 파라미터 값들이 업데이트되는 현상을 방지
#5: 계산된 Output과 레이블 데이터를 기존에 정의한 CrossEntropy를 이용해 Loss 값 계산 후 test_loss에 더해 업데이트
#6: 계산된 벡터 값 내의 가장 큰 값인 위치에 대해 해당 위치에 대응하는 클래스로 예측
#7: 예측한 클래스 값과 실제 레이블이 의미하는 클래스를 비교해 맞으면 correct에 더해 올바르게 예측한 횟수 저장
#8: 현재까지 계산된 test_loss 값을 test_loader 내에 있는 Mini-Batch 개수만큼 나눠 평균 Loss 값 계산
#9: 정확도 계산
[예제 4-2] CIFAR-10 데이터를 이용해 CNN 설계하기
#1: 2차원의 이미지 데이터를 nn.Conv2d 메서드를 이용해 Convolution 연산
#2: 이미지의 채널 수와 동일하게 채널 수를 '3'으로 설정
#3: Convolution 연산을 진행하는 Filter 개수 설정. 설정해주는 Filter 개수만큼 Output의 depth 정해짐
#4: Filter의 크기 설정
#5: Padding
#6: #1에서 설정한 Filter를 이용해 생성된 Feature Map과 Convolution 연산
#7: #3에서 '8개'로 설정 -> Feature Map 채널 수와 동일하게 채널 수 '8'로 설정
#8: 2차원의 Feature Map 내에서 지정한 크기 내 가장 큰 Feature Map 값만 이용
#9: 생성된 Feature Map 내 2*2 크기의 Filter가 돌아다니면서 가장 큰 Feature Map 값 추출
#10: MaxPooling하는 과정에서 Stride
[convolution 연산 -> ReLU 함수 -> MaxPooling] => [1차원 데이터로 변환] => [Fully Connected Layer 통과]
'Study > DL' 카테고리의 다른 글
[모두를 위한 딥러닝 시즌2] lab 10-2. MNIST CNN (0) | 2024.01.15 |
---|---|
[밑시딥1] Chapter 7. 합성곱 신경망(CNN) (1) | 2024.01.15 |
[파이썬 딥러닝 파이토치] Part 3. Deep Learning (0) | 2024.01.12 |
[모두를 위한 딥러닝 시즌2] lab 9-1~9-4 (0) | 2024.01.12 |
[밑시딥1] Chapter 6. 학습 관련 기술들 (0) | 2024.01.10 |