C.W.K.
Stream
Lesson 06 of 07 · published

Custom object 등록

~8 min · serialize

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

loader 는 만나본 적 없는 클래스를 import 못 해

Dense 같은 built-in layer 는 깔끔하게 직렬화돼 — load_model 이 그 클래스를 이미 알거든, Keras 에 같이 딸려오니까. 근데 네가 만든 subclass layer 는 그 특혜가 없어. config 엔 layer 이름이 string 으로 저장되는데, loader 가 그걸 다시 읽을 때 그 string 을 네 Python 클래스로 연결할 지도가 없어. 그래서 나오는 게 그 유명한 Unknown layer 에러야.

두 조각이 고리를 닫아

등록 + get_config 둘이 같이 있어야 custom layer 가 round-trip 돼. @register_keras_serializable 데코레이터는 네 클래스를 이름 → 클래스 registry 에 넣어서 loader 가 string 을 올바른 Python 객체로 풀 수 있게 해. get_config 가 나머지 절반: __init__ 인자 (여기선 units) 를 평범한 dict 으로 돌려줘서, loader 가 만들어졌던 그 설정 그대로 layer 를 재구성해. super().get_config() 를 먼저 불러서 base layer 의 키를 상속한 다음, 네 것을 추가해.

package namespace

package= 인자는 등록 이름에 prefix 를 붙여 (예: my_package>MyCustomLayer). 두 프로젝트가 둘 다 Attention 이라는 layer 를 정의할 때 충돌을 막아줘. 안정적인 package string 하나 골라서 일관되게 유지해 — 저장된 파일의 정체성 일부가 되니까.

Code

custom layer 등록 + 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

앞 custom Transformer block 가져와. @keras.saving.register_keras_serializable() + get_config 메서드 추가. 그 layer 사용 모델 저장 / 재로드. 출력 정확히 일치 확인.

Progress

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

댓글 0

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

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