① nn.Sequential을 사용하면 __init__()에서 사용할 네트워크 모델들을 정의해 줄 뿐만 아니라, forward() 함수에서 구현될 순전파를 계층(layer) 형태로 좀 더 가독성이 뛰어난 코드로 작성할 수 있습니다. 즉, nn.Sequential은 계층을 차례로 쌓을 수 있도록 Wx + b와 같은 수식과 활성화 함수를 연결해 주는 역할을 합니다. 특히 데이터가 각 계층을 순차적으로 지나갈 때 사용하면 좋은 방법입니다. 정리하면 nn.Sequential은 여러 개의 계층을 하나의 컨테이너에 구현하는 방법이라고 생각하면 됩니다.
② 합성곱층(conv layer)은 합성곱 연산을 통해서 이미지의 특징을 추출합니다. 합성곱이란 커널(또는 필터)이라는 n×m 크기의 행렬이 높이(height)×너비(width) 크기의 이미지를 처음부터 끝까지 훑으면서 각 원소 값끼리 곱한 후 모두 더한 값을 출력합니다. 커널은 일반적으로 3×3이나 5×5를 사용하며 파라미터는 다음과 같습니다.
ⓐ in_channels: 입력 채널의 수를 의미합니다. 흑백 이미지는 1, RGB 값을 가진 이미지는 3을 가진 경우가 많습니다.
그렇다면 채널은 무엇일까요?
2D 합성곱층에 이미지를 적용한다고 가정해 봅시다. 흑백 이미지일 경우 이미지 데이터는 w×h 형태의 행렬로 표현됩니다(이때 w는 이미지의 너비, h는 이미지의 높이가 됩니다). 이번에는 컬러 이미지를 가정해 봅시다. 컬러 이미지는 일반적으로 Red, Green, Blue라는 세 개의 채널을 가지고 있습니다. 이때 컬러 이미지는 w×h×c 형태의 행렬로 표현될 수 있습니다(c는 채널 수를 의미합니다). 3차원으로 생각하면 채널은 결국 깊이(depth)를 의미한다고 할 수 있습니다.
▲ 그림 5-27 채널