본문 바로가기
C.W.K.
Stream
Lesson 06 of 07 · published

사용자 정의 객체 등록

~8 min · serialize

Level 0Keras 도제
0 XP0/97 lessons0/20 achievements
0/120 XP to next level120 XP to go0% complete

로더는 처음 보는 클래스를 스스로 찾지 못해

Dense 같은 내장 레이어는 Keras가 이미 클래스를 알고 있어 쉽게 직렬화돼. 하지만 직접 만든 하위 클래스 레이어는 달라. 설정에는 레이어 이름이 문자열로 저장되지만, 로더는 그 문자열을 어떤 Python 클래스에 연결해야 할지 알 수 없어. 이때 Unknown layer 오류가 발생해.

등록과 get_config()가 복원 고리를 완성해

사용자 정의 레이어를 저장하고 복원하려면 등록과 get_config가 모두 필요해. @register_keras_serializable 데코레이터는 이름과 클래스를 레지스트리에 연결해 로더가 문자열을 올바른 Python 객체로 해석하게 해. get_config__init__ 인자인 units 등을 평범한 딕셔너리로 반환해 같은 설정으로 레이어를 다시 만들게 해. 먼저 super().get_config()를 호출해 기본 레이어의 설정을 물려받고 사용자 설정을 덧붙여.

package 이름 공간으로 충돌 막기

package= 인자는 등록 이름에 접두사를 붙여 my_package>MyCustomLayer처럼 만들어. 서로 다른 프로젝트가 모두 Attention이라는 레이어를 정의해도 충돌하지 않게 하는 장치야. 패키지 문자열은 저장 파일의 정체성 일부가 되므로 안정적인 값을 골라 일관되게 유지해.

Code

사용자 정의 레이어 등록과 get_config() 구현·python
@keras.saving.register_keras_serializable(package="my_package")
class MyCustomLayer(keras.layers.Layer):
    def __init__(self, units, **kwargs):
        super().__init__(**kwargs)
        self.units = units

    def get_config(self):
        config = super().get_config()
        config.update({"units": self.units})
        return config

# Now model.save() / load_model() works with custom objects

External links

Exercise

앞에서 만든 사용자 정의 Transformer 블록에 @keras.saving.register_keras_serializable()과 get_config() 메서드를 추가해. 그 레이어를 쓰는 모델을 저장하고 다시 불러와 출력이 정확히 일치하는지 확인해.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.