Page 35 -
P. 35

Decoder(
                   (decoder_lin): Sequential(
                     (0): Linear(in_features=4, out_features=128, bias=True)
                     (1): ReLU(inplace=True)
                     (2): Linear(in_features=128, out_features=288, bias=True)
                     (3): ReLU(inplace=True)
                   )
                   (unflatten): Unflatten(dim=1, unflattened_size=(32, 3, 3))
                   (decoder_conv): Sequential(
                     (0): ConvTranspose2d(32, 16, kernel_size=(3, 3), stride=(2, 2))
                     (1): BatchNorm2d(16, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                     (2): ReLU(inplace=True)
                     (3): ConvTranspose2d(16, 8, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1),
                 output_padding=(1, 1))
                     (4): BatchNorm2d(8, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
                     (5): ReLU(inplace=True)
                     (6): ConvTranspose2d(8, 1, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1),
                 output_padding=(1, 1))
                   )
                 )

               모델 학습에 대한 함수를 생성합니다.


                코드 13-5 모델 학습 함수 생성
                 def train_epoch(encoder, decoder, device, dataloader, loss_fn, optimizer,
                                 noise_factor=0.3):
                     encoder.train()    인코더 훈련
                     decoder.train()    디코더 훈련
                     train_loss = []                  훈련 데이터셋을 이용하여 모델 학습
                     for image_batch, _ in dataloader:   (비지도 학습으로 레이블은 필요하지 않습니다)
                         image_noisy = add_noise(image_batch, noise_factor)
                         image_noisy = image_noisy.to(device)    데이터셋이 CPU/GPU 장치를 사용하도록 지정
                         encoded_data = encoder(image_noisy)    노이즈 데이터를 인코더의 입력으로 사용
                         decoded_data = decoder(encoded_data)    인코더 출력을 디코더의 입력으로 사용
                         loss = loss_fn(decoded_data, image_noisy)
                         optimizer.zero_grad()
                         loss.backward()
                         optimizer.step()
                         train_loss.append(loss.detach().cpu().numpy())
                     return np.mean(train_loss)



               이제 모델을 검증(테스트)하기 위한 함수를 생성합니다.

         690
   30   31   32   33   34   35