*음악 분류 딥러닝을 만들자(31) - macro_child 매개변수

응큼한포도·2024년 9월 29일
0

오늘 코드 역시 https://github.com/melodyguan/enas/blob/master/src/cifar10/general_child
를 참고했다. 현재는 이걸 기본으로 거의 같게 구현하지만 나중에 enas + mnas + tunas 섞이면 바뀔 수 있다

macro_child

아키텍처를 만들고 제어하는 macro_controller를 만들었다면 선택된 아키텍처의 실제 모델을 만들고 학습하기 위한 매서드를 만드는게 macro_child다.




class MacroChild():
    def __init__(self,
                 images,
                 labels,
                 whole_channels,
                 fixed_arc=None,
                 filters_scale=1,
                 num_layres=2,
                 num_branches=6,
                 filters=24,
                 keep_prob=1.0,
                 batch_size=32,
                 clip_mode=None,
                 grad_bound=None,
                 l2_reg=1e-4,
                 lr_init=0.1,
                 lr_dec_start=0,
                 lr_dec_every=10000,
                 lr_dec_rate=0.1,
                 lr_cosine=False,
                 lr_max=None,
                 lr_min=None,
                 lr_T_num=None,
                 optim_algo=None,
                 sync_replicas=False,
                 num_aggregate=None,
                 num_replicas=None,
                 name="child",
                 *args,
                 **kwargs
                 ):
        self.images = images
        self.labels = labels
        self.whole_channels = whole_channels
        self.fixed_arc = fixed_arc
        self.filters_scale = filters_scale
        self.num_layres = num_layres
        self.num_branches = num_branches
        self.filters = filters
        self.keep_prob = keep_prob
        self.batch_size = batch_size
        self.clip_mode = clip_mode
        self.grad_bound = grad_bound
        self.l2_reg = l2_reg
        self.lr_init = lr_init
        self.lr_dec_start = lr_dec_start
        self.lr_dec_every = lr_dec_every
        self.lr_dec_rate = lr_dec_rate
        self.lr_cosine = lr_cosine
        self.lr_max = lr_max
        self.lr_min = lr_min
        self.lr_T_num = lr_T_num
        self.optim_algo = optim_algo
        self.sync_replicas = sync_replicas
        self.num_aggregate = num_aggregate
        self.num_replicas = num_replicas
        self.name = name

images:

모델에 입력되는 이미지 데이터를 의미

labels:

입력된 이미지에 해당하는 라벨(정답)을 의미

cutout_size:

이미지의 일부를 마스킹하는 "cutout" 기법에서 사용할 크기를 정의
데이터 증강 방법 중 하나로, 이미지에서 일정 부분을 잘라내어 학습의 일반화를 돕는다

whole_channels:

True일 경우, 선택한 연산이 전체 채널에 대해 적용되는지 결정
False일 경우, 선택된 연산이 부분적으로 적용

fixed_arc:

특정 아키텍처가 고정되어 있는 경우 사용된다. None으로 설정되면 학습 중에 아키텍처 탐색이 이루어짐

filters_scale:

출력 필터 수를 조정하는 스케일 팩터로, 네트워크의 크기를 조정하는 데 사용된다

num_layers=2:

모델의 층(layer) 수를 정의한다. 논문 저자 레시피를 따라서 2개로 기본설정

num_branches=6:

각 층에서 선택할 수 있는 연산(branch)의 수를 의미. 각 층은 6가지 연산 중 하나를 선택하게 된다.
논문의 레시피를 준수해서 일단 conv 연산 6개를 기본값으로 설정하였지만 나는 거기서 더 추가해서 사용할 생각이므로 바꿀 예정

out_filters=24:

각 층에서 출력되는 필터의 수를 의미. 필터 수가 클수록 모델의 용량이 증가하지만, 계산 비용도 커진다.

keep_prob=1.0:

드롭아웃(dropout) 확률을 의미. 1.0은 드롭아웃이 없음을 뜻하고, 값이 낮아질수록 드롭아웃 확률이 높아짐.

batch_size=32:
한 번의 학습에서 처리할 배치(batch)의 크기를 정의한다.
학습해보면서 조절 할 생각

clip_mode=None:
그래디언트 클리핑(gradient clipping) 방식을 정의. 특정 모드를 사용하면 큰 그래디언트를 제한하여 학습 안정성을 높일 수 있다

grad_bound=None:
그래디언트 크기의 상한을 설정. 그래디언트가 이 값을 넘지 않도록 클리핑하는 데 사용.

l2_reg=1e-4:

L2 정규화를 위한 파라미터. 모델이 과적합되지 않도록 가중치에 L2 규제를 적용하는 강도를 결정한다. 논문 레시피를 그대로 사용

lr_init=0.1:
학습률의 초기값을 설정. 논문 레시피임

lr_dec_start=0:
학습률을 감소시키기 시작하는 시점을 의미. 0이면 처음부터 학습률 감소가 시작. 역시 논문 레시피

lr_dec_every=10000:
학습률 감소가 일정 횟수마다 일어나도록 설정된 값. 10,000번의 학습 후마다 학습률을 감소시킨다. 기본값은 논문대로 설정했지만 나는 줄일 것 같다.

lr_dec_rate=0.1:

학습률이 감소할 때 적용되는 감소 비율을 설정한다. 0.1은 학습률이 10%로 줄어드는 것을 의미

lr_cosine=False:
True로 설정 시, 학습률을 코사인 스케줄링 방식으로 변화한다. False일 경우, 일반적인 지수적 감소 방식이 적용됨.

lr_max=None:
코사인 스케줄링을 사용할 때 학습률의 최대값을 설정.

lr_min=None:
코사인 스케줄링을 사용할 때 학습률의 최소값을 설정

lr_T_0=None:
코사인 학습률 스케줄링에서 첫 주기의 길이를 설정

lr_T_mul=None:
코사인 학습률 스케줄링에서 각 주기의 길이를 몇 배로 늘릴지를 결정

optim_algo=None:
사용할 최적화 알고리즘을 설정합니다. 예를 들어, SGD, Adam 등

sync_replicas=False:
True로 설정하면, 여러 복제본(replicas)에서 동기적으로 학습이 이루어진다. False일 경우 비동기적으로 진행.

num_aggregate=None:
동기적 학습에서 여러 복제본의 그래디언트를 몇 번 집계할지를 설정.

num_replicas=None:
학습에 참여할 복제본(replicas)의 수를 의미. 병렬 처리를 위해 여러 복제본을 사용할 수 있다.

name="child":
모델의 이름을 설정합니다. 기본적으로 "child"라는 이름이 할당.

*args, **kwargs:
추가적으로 전달될 임의의 인수들로, 클래스 상속 시 추가적인 설정값을 받을 수 있습니다.

profile
미친 취준생

0개의 댓글