본문 바로가기

AI/PyTorch

[PyTorch] nn.ReLU(), F.relu()

nn.ReLU 와 F.relu는 ReLU를 객체로 선언해서 사용하느냐, 아니면 함수로 사용하느냐의 차이입니다. ReLU는 학습이 필요없기 때문에 개별적인 객체로 선언할 필요없이 함수를 사용해 적용할 수 있습니다. 이러한 내용은 이곳에서도 자세히 설명하고 있으니 참고하시기 바랍니다.

 

class SimpleCNN(nn.Module):
    def __init__(self):
        super().__init__()
        # self.conv 구현
        self.conv = nn.Sequential(
            ## 코드 시작 ##
            nn.Conv2d(3,32,kernel_size = 3)    # conv_1 해당하는 층
            nn.BatchNorm2d(32),    # batch_norm_1 해당하는 층
            nn.ReLU(),    # ReLU_1 해당하는 층
            nn.Maxpool2d(),    # maxpool_1 해당하는 층
            
            nn.Conv2d(32, 64),    # conv_2 해당하는 층
            nn.BatchNorm2d(64),    # batch_norm_2 해당하는 층
            nn.ReLU(),    # ReLU_2 해당하는 층
            nn.Maxpool2d(),    # maxpool_2 해당하는 층
            
            nn.Conv2d(64, 128),    # conv_2 해당하는 층
            nn.BatchNorm2d(128),    # batch_norm_2 해당하는 층
            nn.ReLU(),    # ReLU_2 해당하는 층
            nn.Maxpool2d(),    # maxpool_2 해당하는 층
            
            nn.Conv2d(128, 128),    # conv_2 해당하는 층
            nn.BatchNorm2d(128),    # batch_norm_2 해당하는 층
            nn.ReLU(),    # ReLU_2 해당하는 층
            nn.Maxpool2d()    # maxpool_2 해당하는 층
            
            
              # conv_3 해당하는 층
               # batch_norm_3 해당하는 층 
          # ReLU_3 해당하는 층
            # maxpool_3 해당하는 층
            
             # conv_4 해당하는 층
      # batch_norm_4 해당하는 층
# ReLU_4 해당하는 층
             # maxpool_4 해당하는 층
            ## 코드 종료 ##
        )
        
        # self.fc 구현
        ## 코드 시작 ##
        self.fc1 = nn.Linear( 128*5*5,512 )
        self.fc2 = nn.Linear( 512, 2 )
        ## 코드 종료 ##
    
    def forward(self, x):
        x = self.conv(x)
        x = x.view(x.shape[0], -1)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x