목차
반응형
레이어 이해하기
1. Convolution
- in_channels: 받게 될 channel의 갯수
- out_channels: 보내고 싶은 channel의 갯수
- kernel_size: 만들고 싶은 kernel(weights)의 사이즈
layer = nn.Conv2d(1, 20, 5, 1).to(torch.device('cpu'))
- 해당 레이어에 이미지 넣은 output 결과를 시각화하기 위한 작업
output_data = layer(image)
output = output_data.data.cpu().numpy()
2. Pooling
- input을 먼저 앞에 넣고, 뒤에 kernel 사이즈와 stride를 순서대로 넣음
pool = F.max_pool2d(image, 2,2)
#MaxPool Layer는 weight가 없기 때문에 바로 numpy()가 가능
pool_arr = pool.numpy()
3. Linear
- nn.Linear는 2d가 아닌 1d만 들어가기 때문에 .view() 1D로 펼쳐줘야함
flatten = image.view(1, 28 * 28 )
lin = nn.Linear(784, 10)(flatten)
#시각화할때 lin에는 weight가 있기 때문에 detach해줘야 에러가 발생하지 않음
plt.imshow(lin.detach().numpy(), 'jet')
4. Softmax
- 결과를 numpy로 꺼내기 위해선 weight가 담긴 Linear에 weight를 꺼줘야함
with torch.no_grad():
flatten = image.view(1, 28 * 28)
lin = nn.Linear(784, 10)(flatten)
softmax = F.softmax(lin, dim=1)
Optimization
1. 모델 설정
model = Net().to(device)
2. optimizer 설정
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.5)
3. 파라미터 확인
params = list(model.parameters())
4. train 하기 전에 모델을 train mode로 변환한다
model.train()
5. 모델에 넣을 데이터를 추출한다
data, target = next(iter(train_loader))
6. 추출한 데이터를 device에 compile한다
data, target = data.to(device), target.to(device)
7. optimizer를 설정하기 전에 gradients를 clear하는 과정이 필요하다
optimizer.zero_grad()
8. 준비한 데이터를 모델에 넣어서 얻은 결과를 loss function에 넣음
loss = F.nll_loss(output, target)
9. loss의 기울기를 계산하고 결과를 파라미터에 업데이트한다.
loss.backward()
optimizer.step()
이 과정을 반복하는 것이 학습
모델 평가
1. 모델을 평가 모드로 전환
model.eval()
2. backpropagatin이나 gradient 계산 등을 꺼서 속도를 높여준다.
3. 모델에 테스트 데이터를 넣어서 예측 결과를 확인한다.
반응형
'Study > 머신러닝' 카테고리의 다른 글
[tensorflow] dataframe 만들고 dataframe으로 학습시키기 (0) | 2021.01.25 |
---|---|
[tensorflow] ImageDataGenerator로 생성한 이미지 데이터로 학습 (0) | 2021.01.25 |
[Tensorflow] 텐서플로우를 사용한 CNN 모델 학습&평가하기 (0) | 2021.01.17 |
[CNN] 레이어 쌓아서 모델 생성하기 (0) | 2021.01.11 |
MNIST 데이터셋을 활용해 시각화하기 (0) | 2021.01.11 |