딥러닝

juyeon·2022년 10월 27일
0

데이터 다루기

목록 보기
35/35
  • 여기서는 딥러닝 극히 일부만, 간단하게.
  • 자세한거는 별도로 글 써야지

라이브러리 import

import tensorflow as tf
from tensorflow import keras
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout, BatchNormalization
from tensorflow.keras.callbacks import  EarlyStopping, ModelCheckpoint

모델 선언

  • 먼저, input shape 확인하기
print(x_train.shape, y_train.shape)
  • output layer의 activation function
    • 회귀: linear
    • 분류
      • 이진 분류: sigmoid
      • 다중 분류: softmax
model = Sequential()
model.add(Dense(4, activation='relu', input_shape=(80,)))
model.add(BatchNormalization())
model.add(Dropout(0.3))
model.add(Dense(3, activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.3))
model.add(Dense(1, activation='sigmoid'))

모델 compile

  • loss

    • 회귀: mean_squared_error, mean_absolute_error
    • 분류
      • 이진 분류: binary_crossentropy
      • 다중 분류
        : 원핫 인코딩이 되어있는 경우: categorical_crossentropy,
        : 원핫 인코딩이 안 되어 있는 경우: sparse_categorical_crossentropy
  • metrics

    • 회귀: mse, mae
    • 분류: accuracy
model.compile(optimizer='adam', 
              loss='binary_crossentropy', 
              metrics=['accuracy']) 

모델 확인

model.summary()

모델 학습하기

callback 설정

  • EarlyStopping
    • mode: val_accuracy는 max, val_loss는 min
  • ModelCheckpoint
    • 모델과 가중치 저장: .h5
    • 가중치만 저장: save_weights_only=True, .ckpt
from tensorflow.keras.callbacks import  EarlyStopping, ModelCheckpoint
es = EarlyStopping(monitor='val_loss', min_delta=0, patience=3, mode='min', verbose=1) # EarlyStopping
mc = ModelCheckpoint('my_checkpoint.h5', monitor='val_loss', save_best_only=True, verbose=1) # ModelCheckpoint: 모델 저장

학습

history = model.fit(X_train, y_train, 
          validation_data=(x_test, y_test),
          epochs=20, 
          callbacks=[es, mc],
          batch_size=32,
          verbose=1)

모델 저장 & 읽기

모델과 가중치를 저장했을 경우

model.save("my_model.h5")
model = keras.models.load_model("my_model.h5")

가중치만 저장했을 경우

model.save_weights("my_modelweight.ckpt")
model.load_weights("my_modelweight.ckpt")

체크포인트로 가중치만 저장했다면..

  • 가중치만 불러오고, 모델 저장해보기
model.load_weights("my_checkpoint.ckpt")
model.save("my_model.h5")

모델 평가

성능 시각화

performance = pd.DataFrame(model.history.history)
plt.plot(performance[['loss','val_loss', 'accuracy','val_accuracy']])
plt.legend(['Loss','Validation Loss', 'Accuracy','Validation Accuracy'])
plt.xlabel('Epochs')
plt.show()
profile
내 인생의 주연

0개의 댓글