더북(TheBook)

2장에서 만들었던 간단한 Dense 층인 NavieDense 클래스의 경우 가중치를 만들기 위해 각 층의 입력 크기를 생성자에게 명시적으로 전달했습니다. 이는 이상적이지 않습니다. 예를 들어 층이 이전 층의 크기를 알도록 하기 위해 다음과 같은 모델이 만들어지기 때문입니다.

model = NaiveSequential([
    NaiveDense(input_size=784, output_size=32, activation="relu"),
    NaiveDense(input_size=32, output_size=64, activation="relu"),
    NaiveDense(input_size=64, output_size=32, activation="relu"),
    NaiveDense(input_size=32, output_size=10, activation="softmax")
])

출력을 만드는 층의 규칙이 복잡하면 문제는 더 심각해집니다. 예를 들어 층이 (batch, input_size * 2 if input_size % 2 == 0 else input_size * 3) 크기의 출력을 반환한다면 어떻게 될까요?

크기를 자동으로 추론할 수 있는 케라스 층으로 NavieDense 클래스를 다시 구현한다면 이전에 보았던 build()call() 메서드가 있는 SimpleDense 층(코드 3-22)과 같을 것입니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.