SimpleDense 클래스에서는 NavieDense처럼 생성자에서 가중치를 만들지 않습니다. 그 대신 상태 생성을 위한 전용 메서드인 build()에서 만듭니다. 이 메서드는 층이 처음 본 입력 크기를 매개변수로 받습니다. build() 메서드는 층이 처음 호출될 때 (__call__() 메서드를 통해) 자동으로 호출됩니다. 사실 이것이 __call__() 메서드가 아니라 별도의 call() 메서드에서 계산을 정의한 이유입니다. 기본 Layer 클래스의 __call__() 메서드는 다음과 같습니다.
def __call__( , ): if not .built: .build( .shape) .built = True return .call( )
자동으로 크기를 추론하면 이전 예시는 다음과 같이 간단하고 깔끔하게 표현할 수 있습니다.
32, ="relu"), SimpleDense(64, ="relu"), SimpleDense(32, ="relu"), SimpleDense(10, ="softmax") ])= keras.Sequential([ SimpleDense(
Layer 클래스의 __call__() 메서드가 자동 크기 추론만 처리하는 것은 아닙니다. 즉시 실행과
(7장에서 배우게 될 개념인) 그래프 실행(graph execution) 사이를 전환하고 (11장에서 다룰) 입력 마스킹(masking)을 처리하는 등 더 많은 작업을 관리합니다. 지금은 사용자 정의 층을 구현할 때 call() 메서드에 정방향 패스 계산을 넣는다는 것만 기억하세요.