→ EarlyStopping 콜백이 훈련을 중단할 때 최선으로 판단한 가중치를 저장하도록 ModelCheckpoint 콜백을 수정. ModelCheckpoint 안에 save_best_only= True 추가
import tensorflow as tf
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
tf.keras.utils.set_random_seed(42)
tf.config.experimental.enable_op_determinism()
iris = load_iris()
X = iris.data
y = iris.target
# StandardScaler를 이용해 데이터 전처리
ss = StandardScaler()
X = ss.fit_transform(X)
# 데이터 나누기 (test 데이터 비율 : 0.2, random_state = 42)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 모델 생성
#첫 번째 dense 층은 16개의 뉴런과 relu 활성화 함수를 사용. 두 번째 dense 층은 3개의 뉴런과 softmax 활성화 함수를 사용
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(16, input_shape=(4,), activation='relu'),
tf.keras.layers.Dense(3, activation='softmax')
])
# 모델 컴파일 : adam optimizer 사용, sparse categorical crossentropy 손실함수 사용, 모델 평가 지표는 정확도 사용
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
# 모델 학습 : X_train, y_train을 이용해 모델을 20번 학습하고, X_test와 y_test로 검증
model.fit(X_train, y_train, epochs=20, validation_data=(X_test, y_test))
# 모델 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print('Test accuracy:', test_acc)