pytorch 는 테스트 할 때 dropout 를 사용 합 니 다.

dropout 는 일반적으로 훈련 할 때 사용 하 는 것 을 알 고 있 습 니 다.그러면 테스트 할 때 어떻게 dropout 를 켜 나 요?
pytorch 에서 네트워크 는 train 과 eval 두 가지 모드 가 있 습 니 다.train 모드 에서 dropout 와 batch normalization 이 유효 합 니 다.val 모드 에서 dropout 는 유효 하지 않 습 니 다.bn 고정 매개 변수 입 니 다.
테스트 할 때 dropout 를 사용 하려 면 dropout 를 train 모드 로 따로 설정 할 수 있 습 니 다.여 기 는 apply 함 수 를 사용 할 수 있 습 니 다.

def apply_dropout(m):
    if type(m) == nn.Dropout:
        m.train()
다음은 전체 데모 코드 입 니 다.

# coding: utf-8
import torch
import torch.nn as nn
import numpy as np
class SimpleNet(nn.Module):
    def __init__(self):
        super(SimpleNet, self).__init__()
        self.fc = nn.Linear(8, 8)
        self.dropout = nn.Dropout(0.5)
    def forward(self, x):
        x = self.fc(x)
        x = self.dropout(x)
        return x
net = SimpleNet()
x = torch.FloatTensor([1]*8)
net.train()
y = net(x)
print('train mode result: ', y)
net.eval()
y = net(x)
print('eval mode result: ', y)
net.eval()
y = net(x)
print('eval2 mode result: ', y)
def apply_dropout(m):
    if type(m) == nn.Dropout:
        m.train()
net.eval()
net.apply(apply_dropout)
y = net(x)
print('apply eval result:', y)
실행 결과:

eval 모드 에서 dropout 가 적용 되 지 않 아 매번 달 리 는 결과 가 다 르 기 때문에 apply 함 수 를 이용 하여 Dropout 를 단독으로 train 모드 로 설정 하면 dropout 가 적 용 됩 니 다.
보충:Pytorch 의 dropout 의합 테스트 피하 기
데 이 터 를 작성 하 다
在这里插入图片描述

2.신경 망 구축


훈련
在这里插入图片描述
4.테스트 결과 비교
주의:테스트 과정 중 모드 전환 에 주의해 야 합 니 다.

在这里插入图片描述
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기