"""MyResNet 모델 설정 클래스. ResNet (He et al., 2015) 논문을 바탕으로 구현한 커스텀 모델의 설정입니다. 허깅페이스 PretrainedConfig를 상속받아 save_pretrained / from_pretrained 호환됩니다. """ from typing import List, Optional from transformers import PretrainedConfig class MyResNetConfig(PretrainedConfig): """ MyResNet 모델의 하이퍼파라미터를 저장하는 Config 클래스. Args: num_channels (int): 입력 이미지 채널 수 (RGB=3, grayscale=1). num_labels (int): 분류할 클래스 개수. block_type (str): 'basic' (ResNet-18/34) 또는 'bottleneck' (ResNet-50/101/152). layers (List[int]): 각 stage(conv2_x ~ conv5_x)에 들어갈 블록 개수. - ResNet-18: [2, 2, 2, 2] - ResNet-34: [3, 4, 6, 3] - ResNet-50: [3, 4, 6, 3] (bottleneck) - ResNet-101: [3, 4, 23, 3] (bottleneck) - ResNet-152: [3, 8, 36, 3] (bottleneck) hidden_sizes (List[int]): 각 stage의 기본 채널 수. 기본값 [64, 128, 256, 512]. image_size (int): 입력 이미지 크기 (정사각형 기준). Example: >>> from configuration_myresnet import MyResNetConfig >>> config = MyResNetConfig(num_labels=10, layers=[2, 2, 2, 2]) """ model_type = "myresnet" def __init__( self, num_channels: int = 3, num_labels: int = 1000, block_type: str = "basic", layers: Optional[List[int]] = None, hidden_sizes: Optional[List[int]] = None, image_size: int = 224, **kwargs, ): super().__init__(num_labels=num_labels, **kwargs) self.num_channels = num_channels self.block_type = block_type self.layers = layers if layers is not None else [3, 4, 6, 3] self.hidden_sizes = hidden_sizes if hidden_sizes is not None else [64, 128, 256, 512] self.image_size = image_size # 검증 if block_type not in ("basic", "bottleneck"): raise ValueError(f"block_type must be 'basic' or 'bottleneck', got {block_type}") if len(self.layers) != 4: raise ValueError(f"layers must have length 4, got {len(self.layers)}") if len(self.hidden_sizes) != 4: raise ValueError(f"hidden_sizes must have length 4, got {len(self.hidden_sizes)}")