About me
home
Portfolio
home

모델 설정

날짜
2023/09/07
코드
model/*.py
태그
이론
파이썬
Student 모델model/resnet.py에 있는 ResNet18 모델을 사용
Teacher 모델model/wrn.py에 있는 WideResNet 모델을 사용

resnet.py (ResNet)

클래스 및 함수 설명

BasicBlock: 기본 블록을 정의하며, 여기에는 Batch Normalization과 ReLU, Convolution 등이 포함되어 있다.
Bottleneck: 더 복잡한 블록을 정의한다.
ResNet: 전체 Residual Network를 구성한다. 이 클래스에서는 BasicBlock 또는 Bottleneck을 사용하여 모델을 구성한다.

BasicBlock

BasicBlock은 2개의 Convolutional 레이어와 Batch Normalization, ReLU 활성화 함수로 구성된다.
이 블록은 상대적으로 간단하고, 계산 비용이 낮다.
주로 깊이가 적은 ResNet 모델 (예: ResNet18, ResNet34)에서 사용된다.

Bottleneck

Bottleneck은 3개의 Convolutional 레이어와 Batch Normalization, ReLU 활성화 함수로 구성된다.
첫 번째와 마지막 Convolutional 레이어는 보통 1x1 크기의 커널을 사용하여 차원을 줄이거나 늘리는 역할을 한다. 중간의 Convolutional 레이어는 3x3 크기의 커널을 사용한다.
이 구조는 계산 효율성을 높이고, 더 깊은 네트워크에서도 효과적으로 학습할 수 있게 한다.
주로 깊이가 깊은 ResNet 모델 (예: ResNet50, ResNet101, ResNet152)에서 사용된다.
이론적으로, Bottleneck 구조는 더 깊고 복잡한 모델에서 더 나은 성능을 제공할 수 있다. 하지만 모델의 깊이나 복잡성, 그리고 특정 문제에 따라 적절한 블록 유형이 달라질 수 있다.
여러 종류의 ResNet (ResNet18, ResNet34, ResNet50 등)을 쉽게 생성할 수 있는 함수가 제공된다.
def ResNet18(): return ResNet(BasicBlock, [2,2,2,2]) def ResNet34(): return ResNet(BasicBlock, [3,4,6,3]) def ResNet50(): return ResNet(Bottleneck, [3,4,6,3]) def ResNet101(): return ResNet(Bottleneck, [3,4,23,3]) def ResNet152(): return ResNet(Bottleneck, [3,8,36,3])
Python
복사

wrn.py (WideResNet)

WRN : Residual block을 활용하며 network의 width를 크게 해서 성능을 높이고자 한 모델

클래스 및 함수 설명

BasicBlock: 가장 기본적인 Residual Block을 정의하고, 여기에는 Batch Normalization과 ReLU, Convolution 등이 포함되어 있다.
NetworkBlock: 여러 개의 BasicBlock을 연결하여 하나의 네트워크 블록을 형성한다.
WideResNet: 전체 Wide Residual Network를 구성한다. 이 클래스에서는 NetworkBlock을 사용하여 모델을 구성한다. widen_factor를 사용하여 네트워크의 '폭'을 늘린다. 이는 각 레이어에서의 뉴런(채널)의 수를 늘리는 것을 의미한다. 이로 인해 모델은 더 많은 특성을 학습할 수 있게 된다.