VGG 모델에서 네트워크를 정의합니다. 네트워크는 코드 6-41에서 정의된 vgg11_config를 사용합니다.
코드 6-42 VGG 계층 정의
def get_vgg_layers(config, batch_norm):
layers = []
in_channels = 3
for c in config: ------ vgg11_config 값들을 가져옵니다.
assert c == 'M' or isinstance(c, int) ------ ①
if c == 'M': ------ 불러온 값이 ‘M’이면 최대 풀링(MaxPool2d)을 적용
layers += [nn.MaxPool2d(kernel_size = 2)]
else: ------ 불러온 값이 숫자이면 합성곱(Conv2d) 적용
conv2d = nn.Conv2d(in_channels, c, kernel_size=3, padding=1)
if batch_norm: ------ 배치 정규화(batch normalization)를 적용할지에 대한 코드
layers += [conv2d, nn.BatchNorm2d(c), nn.ReLU(inplace=True)] ------ 배치 정규화가 적용될 경우 배치 정규화+ReLU 적용
else:
layers += [conv2d, nn.ReLU(inplace=True)] ------ 배치 정규화가 적용되지 않을 경우 ReLU만 적용
in_channels = c
return nn.Sequential(*layers) ------ 네트워크의 모든 계층을 반환