model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Flatten())
model.add(tf.keras.layers.Dense(128, 'relu'))
model.add(tf.keras.layers.Dense(10, 'softmax'))
model.compile('adam', loss = 'sparse_categorical_crossentropy', metrics = ['accuracy'])
epoch_history = model.fit(training_images, training_labels, epochs = 30, validation_split = 0.2)

plt.plot(epoch_history.history['accuracy'])
plt.plot(epoch_history.history['val_accuracy'])
plt.legend(['train accuracy', 'validation accuracy'])
plt.show()

train accuracy는 정답을 알려주니까 학습을 할 수록 올라가는데, validation accuracy는 올라가지 않는다 

이런 상황을 오버 피팅이라고 한다.

 

def build_model():
    model = Sequential()
    model.add(Dense(units = 4, activation = 'relu', input_shape = (8, )))
    model.add(Dense(units = 20, activation = 'relu'))
    model.add(Dense(units = 10, activation = 'relu'))
    model.add(Dense(units = 1, activation = 'linear'))

    # 옵티마이저의 learning rate를 설정하는 방법
    model.compile(tf.keras.optimizers.RMSprop(learning_rate = 0.001), loss = 'mse', metrics = ['mse', 'mae'])
    #model.compile('adam', 'mse')
    return model
    
model = build_model()
epoch_history = model.fit(X_train, y_train, epochs = 1000, validation_split = 0.2)

Validation set(검정 데이터)은 training set으로 만들어진 모델의 성능을 측정하기 위해 사용된다. 일반적으로 어떤 모델이 가장 데이터에 적합한지 찾아내기 위해서 다양한 파라미터와 모델을 사용해보게 되며, 그 중 validation set으로 가장 성능이 좋았던 모델을 선택한다. validation_split이 0.2면 학습데이터의 20프로를 에포크 한번 끝날 때마다 오차를 측정하는 데 쓴다.

 

+ Recent posts