연구 노트/탄소 기상 예측

딥러닝 :: 신경망 결과 Asos

airmaster 2022. 7. 27. 17:25
728x90

from keras import models
from keras import layers
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
# 모델 구성
_input_shape = X_train.shape[1]   # input_shape : # of columns +1
_epochs = 500  # 모든 샘플에 대해 학습되는 횟수
_batch_size = 256 #512  # 샘플을 한번에 몇 개씩 처리할 지 결정. 전체 rows 를 _batch_size 만큼 끊어서 집어 넣어라.
_patience = 200
_node_in = 16  # 입력층 노드 수
_node1 = 16  # 은닉층 노드 수 
_node_out = 1  # 출력층 노드 수

model = models.Sequential()  #은닉층을 차곡차곡 쌓는 방식의 모델이 sequential()
model.add(layers.Dense(_node_in, activation = 'relu', input_shape=(_input_shape,)))   
                                            # _input_shape 개의 입력값을 받아 은닉층 _node_in 개 노드로 보낸다는 뜻.
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
# model.add(layers.Dense(16, activation = 'relu'))
model.add(layers.Dense(_node_out, activation='sigmoid'))
# 모델 컴파일
model.compile(optimizer = 'rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

# 모델 저장 폴더 생성
# MODEL_DIR = 'C:\Users\chpark\OneDrive\My_Code\L_Deeplearning\model_out'
# if not os.path.exists(MODEL_DIR):
#     os.mkdir(MODEL_DIR)
modelpath = 'C:/Users/chpark/OneDrive/My_Code/L_Deeplearning/model_out/{epoch:02d}-{val_loss:.4f}.hdf5'
# 모델 업데이트 및 저장
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
# 학습 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor = 'val_loss', patience=_patience)

 

 

history = model.fit(X_train, y_train, epochs=_epochs,
                   batch_size=_batch_size, 
                   validation_data=(X_test, y_test), 
                   verbose = 1,
                   callbacks=[early_stopping_callback])

history_dict = history.history
loss= history_dict['loss']
val_loss = history_dict['val_loss']
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']

 

 

# 훈련과 검증 손실 그리기

epochs = range(1, len(loss) + 1)

plt.plot(epochs, loss, 'bo', label='Training loss')    # bo means blue dot
plt.plot(epochs, val_loss, 'b', label = 'Validation loss')    # 'b'는 파란색 실선
plt.title('Training and validation loss')
plt.xlabel('epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

 


# 훈련과 검증 정확도 그리기
plt.clf()     # initialize graph


plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

results = model.evaluate(X_test, y_test)

 
329/329 [==============================] - 1s 3ms/step - loss: 2531033943336512517046272.0000 - accuracy: 0.7959
728x90