이제 모델을 생성합니다.
코드 2-6 모델 생성 및 컴파일
from tensorflow.keras.layers import Input, Dense, Activation, Dropout ------ 케라스 API를 이용하여 Input, Dense, Activation, Drop 클래스를 호출
from tensorflow.keras.models import Model ------ 역시 케라스 API를 이용하여 Model 클래스 호출
input_layer = Input(shape=(X.shape[1],)) ------①
dense_layer_1 = Dense(15, activation='relu')(input_layer)
dense_layer_2 = Dense(10, activation='relu')(dense_layer_1)
output = Dense(y.shape[1], activation='softmax')(dense_layer_2)
model = Model(inputs=input_layer, outputs=output)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['acc'])
model.summary()
① model.summary() 결과에서 확인할 수 있는 것처럼 모델은 밀집층(혹은 완전연결층이라고도 함) 총 세 개로 구성되어 있습니다. 처음 두 개는 각각 렐루(ReLU) 활성화 함수를 사용하는 노드 15개와 노드 열 개로 구성되어 있습니다. 마지막 밀집층은 노드 네 개(y.shape[1] == 4)와 소프트맥스(softmax) 활성화 함수를 포함하고 있습니다. 또한, 손실 함수로 categorical_crossentropy를 사용하며, 옵티마이저는 아담(Adam)을 사용합니다. 참고로 sparse_categorical_crossentropy와 categorical_crossentropy 모두 다중 분류에 대한 손실 함수로 사용합니다. 하지만 categorical_crossentropy의 출력 값은 원-핫 인코딩된 결과가 출력되지만, sparse_categorical_crossentropy는 정수 형태(원-핫 인코딩하지 않고 정수 형태)로 출력됩니다.