import matplotlib.pyplot as plt
fig, axs = plt.subplots(1,10,figsize=(10,10))
for i in range(10):
axs[i].imshow(train_input[i], cmap='gray_r')
axs[i].axis('off')
plt.show()
train_scaled = train_input / 255.0
train_scaled = train_scaled.reshape(-1, 28*28)
교차검증과 SGDClassifier를 활용하였을 때 스코어는 0.8196 정도로 나왔다.
dense = keras.layers.Dense(10, activation ='softmax', input_shape=(784,))
model = keras.Sequential(dense)
model.compile(loss='sparse_categorical_crossentropy', metrics='accuracy')
model.fit(train_scaled, train_target, epochs=5)
model.evaluate(val_scaled, val_target)
분류 문제의 hidden layer의 활성화 함수로 sigmoid, ReLU 등 다양한 함수를 사용하지만, 회귀는 활성화 함수를 사용할 필요가 없다.
hidden layer(dense_10)-> output layer(dense_11)순으로 만들어보기
hidden layer의 뉴런 개수를 100개로 지정-> hidden layer의 output shape이 (None, 100)
Flatten층 = reshape()메서드와 같은 역할, 배치 차원을 제외하고 나머지 입력 차원을 1차원으로 펼쳐줌
compile, fit, evaluate부분은 위의 코드와 동일
optimizer: 다양한 종류의 경사 하강법 알고리즘
history = model.fit(train_scaled, train_target, epochs=20, verbose=0,
validation_data=(val_scaled, val_target))
다음은 Adam optimizer를 적용하고 훈련시켰을 때의 train, validation loss 그래프
model = model_fn()
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')
history = model.fit(train_scaled, train_target, epochs=20, verbose=0,
validation_data=(val_scaled, val_target))
plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])
plt.xlabel('epoch')
plt.ylabel('loss')
plt.legend(['train', 'val'])
plt.show()
참고: model_fn()은 모델의 구조를 형성하고 모델을 반환하는 함수
model = model_fn(keras.layers.Dropout(0.3)) # 30% 정도를 드롭아웃
model.save_weights('model-weights.h5')
# 새로운 모델 만들고 파라미터 읽어서 사용
model = model_fn(keras.layers.Dropout(0.3))
model.load_weights('model-weights.h5')
model.save('model-whole.h5')
# 바로 사용
model = keras.models.load_model('model-whole.h5')
model = model_fn(keras.layers.Dropout(0.3))
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics='accuracy')
checkpoint_cb = keras.callbacks.ModelCheckpoint('best-model.h5', save_best_only=True)
model.fit(train_scaled, train_target, epochs=20, verbose=0,
validation_data=(val_scaled, val_target),
callbacks=[checkpoint_cb])
early_stopping_cb = keras.callbacks.EarlyStopping(patience=2, restore_best_weights=True)
Early stopping을 통해 성능이 훨씬 향상됨!
출처: [혼자공부하는 머신러닝+딥러닝] 의 chapter 7-(1),(2),(3)을 보고 핵심 내용만 정리한 글