모델 전체보다 레이어 하나를 상속하는 일이 더 흔해
사용자 정의 레이어는 Sequential, Functional, 다른 Subclass 모델 어디에나 기본 레이어처럼 넣을 수 있어 재사용하기 좋아. 세 메서드의 역할을 기억하면 돼. __init__()은 units와 activation 같은 설정을 보관하고, build()는 가중치를 만들며, call()은 순전파 계산을 정의해.
가중치는 입력 모양을 안 뒤에 만들어
가중치를 __init__()에서 만들면 입력 특징 차원을 미리 정해 코드에 박아야 하므로 다른 입력에 재사용하기 어려워. build(input_shape)는 레이어가 실제 입력을 처음 볼 때 자동으로 호출되고 input_shape[-1]을 이용해 가중치 행렬의 크기를 정해. 이런 지연 생성 덕분에 MyDense(64)라고만 작성해도 입력에 맞춰 가중치가 만들어져. add_weight()로 등록해야 Keras가 그 값을 학습 가능한 변수로 추적해.
get_config()는 생성자 인자를 평범한 딕셔너리로 돌려줘 저장된 파일에서 같은 레이어를 다시 만들 수 있게 해. 이를 빠뜨리면 사용자 정의 레이어가 포함된 모델은 model.save()와 load_model()을 온전히 왕복하지 못해.