Page 34 -
P. 34

nn.BatchNorm2d(16),
                                   nn.ReLU(True),
                                   nn.ConvTranspose2d(16, 8, 3, stride=2,
                                                      padding=1, output_padding=1),
                                   nn.BatchNorm2d(8),
                                   nn.ReLU(True),
                                   nn.ConvTranspose2d(8, 1, 3, stride=2,
                                                      padding=1, output_padding=1)
                               )    인코더의 합성곱층에 대응

                           def forward(self, x):
                               x = self.decoder_lin(x)
                               x = self.unflatten(x)
                               x = self.decoder_conv(x)
                               x = torch.sigmoid(x)
                               return x



                    인코더와 디코더 객체를 초기화하고, 모델의 훈련 과정에 필요한 손실 함수와 옵티마이저를 지정
                    합니다.


                     코드 13-4 손실 함수와 옵티마이저 지정
                       encoder = Encoder(encoded_space_dim=4, fc2_input_dim=128)
                       decoder = Decoder(encoded_space_dim=4, fc2_input_dim=128)
                       encoder.to(device)
                       decoder.to(device)
                                                                                                     13

                       params_to_optimize = [
                           {'params': encoder.parameters()},                                          생성 모델
                           {'params': decoder.parameters()}
                       ]    인코더와 디코더에서 사용할 파라미터를 다르게 지정
                       optim = torch.optim.Adam(params_to_optimize, lr=0.001, weight_decay=1e-05)
                       loss_fn = torch.nn.MSELoss()


                    오토인코더에서 가장 널리 사용되는 손실 함수는 ‘평균 제곱 오차’와 ‘이진 크로스 엔트로피’입

                    니다. 입력 값이 (0,1) 범위에 있으면 이진 크로스 엔트로피를 사용하고, 그렇지 않으면 평균 제
                    곱 오차를 사용합니다. 옵티마이저는 아담을 사용했지만 알엠에스프롭(RMSProp) 또는 아다델타
                    (adadelta) 같은 옵티마이저를 이용하여 성능을 비교해 보는 것도 학습에 도움이 많이 되니, 옵션을
                    변경하여 테스트를 진행해 보기 바랍니다.

                    다음은 앞에서 생성한 모델 네트워크의 구조를 보여 줍니다(디코더만 보여 줍니다).

                                                                                                  689
   29   30   31   32   33   34   35