model.summary()
를 통해 만들어진 모델의 요약을 확인할 수 있다.솔직히 오늘 배운 내용만으로는 히든 레이어가 잘 이해가 되지 않았다.
추가로 찾아서 공부한 뒤 정리하자.
여기에 히든 레이어 2개 층을 사이에 끼우면 다음과 같이 된다.
위 식은 빨간색으로 표시된 히든 레이어 노드에서 일어나는 일을 나타낸 식이다.
여기서 H는 히든 레이어를 거침으로써 새롭게 만들어진 high-level의 특징(feature)이다.
히든 레이어의 노드 수는 해당 level에서 추출하려는 feature의 수와 같고, 히든 레이어가 깊게 쌓일 수록 기존에 없던 더 고수준의 특징이 생성된다.
히든 레이어를 이용한 딥러닝 모델에서 학습이 잘 되었다는 것은 연결된 것으로 부터 새로운 feature를 잘 추출한 것이다. = Feature representation 또는 Feature Learning
모델링에서 히든레이어를 추가하는 방법은 활성함수로 relu, swish 등을 사용하는 Dense layer를 추가하는 것이다.
## 회
# 1. 이전 모델링 클리어
keras.backend.clear_session()
# 2. 모델 발판 만들기
model = keras.models.Sequential()
# 3. 모델 블록 쌓기
model.add( keras.layers.Input(shape=(8, )) )
model.add( keras.layers.Dense(32, activation='relu') )
model.add( keras.layers.Dense(32, activation='relu') )
model.add( keras.layers.Dense(1, activation='sigmoid') )
# 4. 컴파일
model.compile(loss='binary_crossentropy', metrics = ['accuracy'],optimizer='adam')
# 요약
model.summary()
# 직접 수식을 입력
train_x = (train_x - min_n) / (max_n - min_n)
test_x = (test_x - min_n) / (max_n - min_n)
# Sequential API
# 1. 이전 모델 청소
keras.backend.clear_session()
# 2. 모델 선언
model = keras.models.Sequential()
# 3. 모델 레이어 쌓기
model.add( keras.layers.Input(shape=(784, )) )
model.add( keras.layers.Dense(256, activation='relu') )
model.add( keras.layers.Dense(256, activation='relu') )
model.add( keras.layers.Dense(10, activation='softmax') )
# 4. 컴파일
model.compile(loss = keras.losses.binary_crossentropy,
metrics = ['accuracy'],
optimizer = 'adam')
# 요약
model.summary()
es = EarlyStopping(monitor='val_loss',
min_delta=0,
patience=5,
verbose=1,
restore_best_weights=True) # 가장중요한 옵션
monitor
: 관측 대상 지정. 이 경우에는 검증용 데이터에 대한 loss이다.min_delta
: Threshold. 이전 epoch의 val_loss보다, 현재 epoch의 val_loss가 min_delta보다 많이 감소해야 학습이 이루어졌다고 판단한다.patience
: min_delta 를 만족하지 못한 epoch를 몇 번이나 참을지 설정한다.restore_best_weights
: True로 설정하면, 전체 epoch 중 가장 학습 성능이 좋았던 epoch의 가중치 값을 모델이 사용하도록 한다.model.fit(train_x, train_y, validation_split=0.2, callbacks=[es],
verbose=1, epochs=50)
validation_split
: 학습용 데이터와 검증용 데이터를 나누는 옵션이다. val_loss를 모니터링하기 위해 꼭 필요하다.callbacks
: 앞서 선언한 EarlyStopping을 현재 모델에 적용하겠다고 선언한 것이다.솔직히 무언가 굉장히 많이 듣고 필기도 많이 했지만 정작 이해가 되거나 딥러닝에 대해 크게 배운 것은 없는 느낌이다.
다행히 수업 중 이해가 안가는 것은 틈틈히 정리해 두었고, 이제 찾아서 따로 배우는 일만 남았다.
딥러닝 공부를 위해 좋은 강의와 책들도 많이 추천 받았으니 포기하지 말고 꼭 배울 수 있도록 하자.