더북(TheBook)

2 입력층, 은닉층, 출력층

 

먼저 딥러닝의 구조를 짜고 층을 설정하는 부분을 살펴보면 다음과 같습니다.

model = Sequential()
model.add(Dense(30, input_dim=16, activation='relu'))
model.add(Dense(1, activation='sigmoid'))

셋째 마당에서 딥러닝이란 입력층과 출력층 사이에 은닉층들을 차곡차곡 추가하면서 학습시키는 것임을 배웠습니다. 이 층들이 케라스에서는 Sequential() 함수를 통해 쉽게 구현됩니다. Sequential() 함수를 model로 선언해 놓고 model.add()라는 라인을 추가하면 새로운 층이 만들어집니다.

코드에는 model.add()로 시작되는 라인이 두 개 있으므로 층을 두 개 가진 모델을 만든 것입니다. 맨 마지막 층은 결과를 출력하는 ‘출력층’이 됩니다. 나머지는 모두 ‘은닉층’의 역할을 합니다. 따라서 지금 만들어진 이 층 두 개는 각각 은닉층과 출력층입니다.

각각의 층은 Dense라는 함수를 통해 구체적으로 그 구조가 결정됩니다.

이제 model.add(Dense(30, input_dim=16)) 부분을 더 살펴보겠습니다. model.add() 함수를 통해 새로운 층을 만들고 나면 Dense() 함수의 첫 번째 인자에 몇 개의 노드를 이 층에 만들 것인지 숫자를 적어 줍니다. 노드란 앞서 소개된 ‘가중합’에 해당하는 것으로 이전 층에서 전달된 변수와 가중치, 바이어스가 하나로 모이게 되는 곳입니다. 하나의 층에 여러 개의 노드를 적절히 만들어 주어야 하는데, 30이라고 되어 있는 것은 이 층에 노드를 30개만들겠다는 것입니다. 이어서 input_dim이라는 변수가 나옵니다. 이는 입력 데이터에서 몇 개의 값을 가져올지 정하는 것입니다. keras는 입력층을 따로 만드는 것이 아니라, 첫 번째 은닉층에 input_dim을 적어 줌으로써 첫 번째 Dense가 은닉층 + 입력층의 역할을 겸합니다. 우리가 다루고 있는 폐암 수술 환자의 생존 여부 데이터에는 입력 값이 16개 있습니다. 따라서 데이터에서 값을 16개 받아 은닉층의 노드 30개로 보낸다는 의미입니다.

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