딥러닝 - Tensorflow: build(), call(), compile() & fit()

dumbbelldore·2025년 1월 11일
0

zero-base 33기

목록 보기
68/97

1. build()

  • 레이어가 사용할 가중치나 변수를 초기화하는 메서드

  • 데이터를 입력받기 전에 1회 호출되며, input_shape을 자동으로 계산하여 데이터에 맞는 가중치와 변수를 초기화함

class MyLayer(tf.keras.layers.Layer):
  def __init__(self):
    super(MyLayer, self).__init__()

  def build(self, input_shape): # input_shape = 자동 계산
    self.W = self.add_weight(
    	shape=(input_shape[-1], 10),
        initializer='random_normal'
    ) # 가중치 초기화

2. call()

  • Layer() 또는 Model()이 실행될 때, 주어진 입력을 처리하여 출력을 반환하는 메서드

  • 주로 연산을 수행하거나, 레이어를 어떻게 쌓을지 내용을 기술하는 곳

class MyLayer(tf.keras.layers.Layer):
  def __init__(self):
    super(MyLayer, self).__init__()

  def call(self, inputs):
    return inputs * 2  # 연산 수행 정의

3. compile()

  • 모델의 훈련 프로세스를 설정하는 메서드로, fit() 전에는 compile() 과정이 선행되어야 함
model.compile(
	optimizer='adam', # 최적화 함수
	loss='sparse_categorical_crossentropy', # 손실 함수
	metrics=['accuracy'] # 평가 지표
)
  • 주요 최적화 함수

    • tensorflow.keras.optimizers.SGD: 가장 기본적인 경사 하강법 적용

    • tensorflow.keras.optimizers.RMSprop: 기울기의 제곱의 이동 평균을 이용하여 학습률을 자동으로 조정

    • tensorflow.keras.optimizers.Adam: 모멘텀(가속도)을 이용하여 학습률을 자동으로 조정, 가장 많이 활용됨

  • 주요 손실 함수

    • tensorflow.keras.losses.categorical_crossentropy: 다중 클래스 분류 문제에 사용 (라벨이 원-핫 인코딩된 경우)

    • tensorflow.keras.losses.sparse_categorical_crossentropy: 다중 클래스 분류 문제에 사용 (라벨이 정수 인코딩된 경우)

    • tensorflow.keras.losses.binary_crossentropy: 이진 분류 문제에 사용

    • tensorflow.keras.losses.MeanSquaredError: 회귀 문제에서 사용(MSE)

    • tensorflow.keras.losses.MeanAbsoluteError: 회귀 문제에서 사용(MAE)

  • 주요 평가 지표

    • 분류 모델: accuracy, AUC, precision, recall, f1_score
    • 회귀 모델: mean_squared_error, mean_absolute_error

4. fit()

  • 데이터를 입력시켜 모델을 훈련시키는 메서드
model.fit(x_train, y_train, epochs=10, batch_size=32)
  • epoch: 모델이 훈련 데이터셋을 몇 번 반복해서 학습할지 결정

    • 더 많은 에폭을 설정하면, 모델이 더 많은 데이터를 학습하고 가중치를 더 자주 업데이트하게 됨

    • 너무 적은 에폭 수는 모델이 충분히 학습되지 않을 수 있음

    • 너무 많은 에폭 수는 과적합(overfitting)을 초래할 수 있음

  • batch_size: 훈련 데이터셋을 나누는 하위 집합의 크기

    • 훈련 데이터셋이 너무 크면 한 번에 모든 데이터를 메모리에 올릴 수 없기 때문에 데이터를 여러 개의 배치로 나눠서 처리하는 개념

    • 작은 배치 크기는 모델을 더 자주 업데이트하지만, 각 업데이트 과정이 불안정할 수 있음

    • 큰 배치 크기는 한 번에 더 많은 데이터를 사용하여 업데이트하므로 안정적이지만, 계산 비용이 더 많이 들게 됨

  • callback: 모델 학습 과정에서 특정 이벤트(에포크 시작 시, 10 에포크 마다, 학습 종료 시 등)에 대해 사용자가 정의한 작업을 실행하게끔 할 수 있음

    • tf.keras.callbacks.EarlyStopping: 성능 개선이 이루어지지 않는 경우 학습 조기 종료
    • tf.keras.callbacks.ModelCheckpoint: 학습 중 특정 조건을 만족하는 경우 모델 저장
    • tf.keras.callbacks.LearningRateScheduler: 학습 중 특정 조건에 따라 학습률 조정
    • tf.keras.callbacks.TensorBoard: TensorBoard를 이용하여 학습 로그를 시각활 할 수 있도록 세팅
  • verbose: 학습 진행과정을 어떻게 출력할 것인지 설정

    • 0: 출력하지 않음
    • 1: 전체를 출력함
    • 2: 간단하게 출력함
  • validation_split: 학습 데이터 중 어느 정도의 비율을 검증 데이터로 활용할 것인지 설정

  • validation_data: 검증 데이터로 사용할 별도의 데이터셋을 지정 (validation_split과 동시 사용 불가)


*이 글은 제로베이스 데이터 취업 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.

profile
데이터 분석, 데이터 사이언스 학습 저장소

0개의 댓글