pytorch
로 진행 torch
: pytorch 라이브러리torchvision
: mnist img 셋 가져오는 용도 torch.nn.functional
: 딥러닝을 위한 torch 함수- 수학함수torchvision
: 이미지 변환 함수전체 클래스 개수(구분 라벨링)
을 입력값으로 받음ConVet 클래스
로 선언 forward
메서드 지정 각 레이어
에 대한 정의를 해준다.self.layer1 = nn.Sequential(nn.Conv2d(in_channels=1, out_channels=16,
kernel_size=5, stride=1, padding=2),
nn.ReLU(),
nn.MaxPool2d(kernel_size=2, stride=2))
nn.sequential
: pytorch neural network 하나의 멤버 변수로 묶어주는 역할nn.Conv2d
nn.ReLU
: 활성함수로 ReLU사용nn.MaxPool2d
out_channel
만큼 in_channel
로 받는다. fully connected layer
구현nn.linear
= 결과로 나온 값을 선형 형태로 출력in_features
: 입력 데이터 개수out_channel
: 출력 데이터 개수 클래스 개수와 동일해야 함- 각각에 대한 확률값 표현 위해서각 레이어를 거치는 연산
을 진행한다.flatten
을 진행한다. - 하나의 벡터
형태로 만들어주기 위해fc
를 통과하여 선형형태
로 만들어준다.softmax
를 통해서 각 벡터값에 대한 확률값
을 출력한다.num_epochs
: 네트워크가 전체 데이터
를 몇 번 반복할지 num_classes
: class 개수 ( 숫자 구분 0-9 10개)batch_size
: 네트워크가 한 번 학습에 사용
하는 데이터의 개수learning_rate
: 1.0미만의 적당한 값root
: 데이터 경로
train
: 트레인 데이터셋인지 아닌지
transfrom
: 이미지 행렬 -> pytorch 텐서
download
: 데이터 다운로드 여부
dataset
: 데이터셋 지정
batch_size
: 한 번 학습할 떄 사용할 크기 (하이퍼파라미터이용)
shuffle
: 데이터 셋 섞기 (해주어야 -학습 잘됌)
인스턴스
생성 -> 클래스 적용criterion
- crossEntrophy
사용optimizer
는 SGD(stocastic gradient descendent)
사용model.parameters()
: 모델 학습 파라미터외부
for 문 전체 데이터셋
내부
for 문 : batch
optimizer.zero_grad()
: batch 마다 grad값 초기화loss.backward
: 역전파(backpropagation) 적용optimizer.step()
: 계산된 gradient값 이용하여 모델 내 변수 업데이트-, prediceted
: 정확도 산출torch.max
: 텐서에서 가장 높은 값의 index(=label)를 출력correct
: 예측과 라벨일 일치한 것의 갯수 세기 (.item() - 숫자만 추출)batch 돌때마다 결과 출력
model.eval()
: 모델을 평가하는 모드로 고정 - 모델 변수 고정with torch_no_grad()
: 테스트 과정에서 gradient 계산을 배제torch.save(model,state_dict(), 'cnn.pt')
: 모델 파라미터 딕셔너리
형태로 저장matplotlib
시각화를 위해 importbatch_size =1
로 지정 : 테스트 목적model.load_state_dict
: 저장한 모델 불러오기