왕현성
코딩발자취
왕현성
전체 방문자
오늘
어제
  • 코딩 (277)
    • Python (71)
    • Java (16)
    • MySQL (34)
    • 인공지능 (48)
      • 머신러닝 (16)
      • 딥러닝 (32)
    • 영상처리 (4)
    • Rest API (21)
    • Android Studio (25)
    • streamlit (13)
    • DevOps (22)
      • AWS (9)
      • PuTTY (5)
      • Git (4)
      • Serverless (2)
      • Docker (2)
    • IT 기술 용어 (6)
    • 디버깅 ( 오류 해결 과정 ) (17)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • pytorch
  • 영상처리
  • UnboundLocalError
  • 컴퓨터비전
  • 영상처리역사
  • labelme UnocodeDecodeError
  • ComputerVision
  • maskimage
  • get_long_description
  • labelme
  • numpy
  • 기상탐사
  • matplotlib
  • PIL
  • 비지도학습
  • yolov8
  • 영상기술
  • 의료이미징
  • alibi-detection
  • tune()
  • imageprocessing
  • PYTHON
  • pip install labelme
  • unsupervised
  • alibidetect
  • ckpt_file
  • TensorFlow
  • 딥러닝
  • OpenCV
  • encoding='utf-8'

최근 댓글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
왕현성

코딩발자취

딥러닝 : 에포크 시마다 가장 좋은 모델을 저장하는 ModelCheckpoint와 기록을 남기는 CSVLogger 사용법
인공지능/딥러닝

딥러닝 : 에포크 시마다 가장 좋은 모델을 저장하는 ModelCheckpoint와 기록을 남기는 CSVLogger 사용법

2023. 1. 2. 17:25
728x90

The Vehicle Type Classification Project

 

Vehicle Type을 분류하는 실습을 진행해보겠습니다.

 

# import the necessary packages
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.layers import AveragePooling2D, GlobalAveragePooling2D, BatchNormalization
#from tensorflow.keras.applications import ResNet50
#from tensorflow.keras.applications import Xception
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras.layers import AveragePooling2D
from tensorflow.keras.layers import Dropout
from tensorflow.keras.layers import Flatten
from tensorflow.keras.layers import Dense
from tensorflow.keras.layers import Input
from tensorflow.keras.models import Model
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.optimizers import SGD
from tensorflow.keras.utils import to_categorical
from sklearn.preprocessing import LabelBinarizer
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from imutils import paths
import matplotlib.pyplot as plt
import numpy as np
import argparse
import cv2
import os
import sys
import tensorflow as tf
import h5py
import numpy as np
import sys

필요 라이브러리 임포트,

 

구글드라이브 마운트 하기

from google.colab import drive
drive.mount('/content/drive')

경로 셋팅

TYPE='type'
model_type='mobilenetv2'
user='block'
iteration='1-2'

first_time_training=True

PROJECT_PATH= '/content/drive/MyDrive/Colab Notebooks/ml_plus'

HDF5_DATASET_PATH=PROJECT_PATH+'/vehicle_datasets/vehicle-type-dataset-SIZE224-train-dev-test-v2.hdf5'

TARGET_CLASSIFICATION_MODEL=PROJECT_PATH+'/trained-models/'+model_type+'/'+'vehicle-classification-by-'+TYPE+'-'+model_type+'-'+user+'-'+iteration+'.h5'

CHECKPOINT_PATH = PROJECT_PATH+'/checkpoints/'+model_type+'/'+'by-'+TYPE+'-'+model_type+'-'+user+'-'+iteration+'.h5'

LOGFILE_PATH=PROJECT_PATH+'/log/'+model_type+'/'+model_type+'-by-'+TYPE+'-training-log'+user+'-'+iteration+'.csv'

함수 만들기

def load_dataset_from_hdf5_file(hdf_file_path):
  
  hf = h5py.File(hdf_file_path, 'r')

  X_train = np.array(hf['trainX'])
  y_train = np.array(hf['trainY'])
  train_label = np.array(hf['trainLabels'])

  X_test = np.array(hf['testX'])
  y_test = np.array(hf['testY'])
  test_label = np.array(hf['testLabels'])

  X_val = np.array(hf['devX'])
  y_val = np.array(hf['devY'])
  val_label = np.array(hf['devLabels'])

  return X_train, y_train, train_label, X_test, y_test, test_label, X_val, y_val, val_label

모델링하기 : 트랜스퍼 러닝 적용

base_model = MobileNetV2(input_shape=(224,224,3),include_top=False)
base_model.trainable = False
head_model = base_model.output
head_model = Flatten()(head_model)
head_model=Dense(128,'relu')(head_model)
head_model=Dropout(0.4)(head_model)
head_model=Dense(64,'relu')(head_model)
head_model=Dense(7,'softmax')(head_model)
model = Model(inputs=base_model.input,outputs = head_model)

# 파이썬 코드로, 디렉토리 만드는 방법

if not os.path.exists(PROJECT_PATH + '/checkpoints/' + model_type + '/') :
  os.makedirs(PROJECT_PATH + '/checkpoints/' + model_type + '/')
  # checkpoints 디렉토리 만들기
if not os.path.exists(PROJECT_PATH + '/log/' + model_type + '/') :
  os.makedirs(PROJECT_PATH + '/log/' + model_type + '/')
  # 로그 디렉토리 만들기
from keras.callbacks import ModelCheckpoint

Modelcheckpoint 라이브러리 import

 

# 1. 가장 좋았을 때의 모델을 저장하라
 
mcp = ModelCheckpoint(CHECKPOINT_PATH,monitor='val_accuracy',
                      save_best_only=True,
                      verbose=1)
# 2. 에포크가 끝날 때마다, 현재는 화면에 표시하는데
# 이 정보를 파일로 저장해서 화면을 안 보더라도 나중에
# 파일을 열어서 확인이 가능하도록 Log를 남기는 방법
from keras.callbacks import CSVLogger

CSVLogger 라이브러리 import

csv_logger=CSVLogger(LOGFILE_PATH,append=True)

컴파일과 학습

model.compile(optimizer=Adam(0.0001),loss='categorical_crossentropy',metrics=['accuracy'])
# 바로 학습하기 전에 이미지 데이터를 증강하고 학습한다
# X_train을 확인해보니 이미0~1사이의 값으로 피처스케일링 되어있으므로
# 데이터증강만 한다.
train_datagen = ImageDataGenerator(rotation_range=10,horizontal_flip=True)
train_generator=train_datagen.flow(X_train,y_train,batch_size=64)
epoch_history = model.fit(train_generator,epochs=40,validation_data=(X_val,y_val),
                          batch_size=64,
                          callbacks=[mcp,csv_logger])

val_accuracy가 98퍼센트일 때 저장 그 아래는 더이상 좋아지지 않으니 저장하지 않는다라고 알려주는 것!

구글 드라이브에 저장되어있는 것을 확인할 수 있다.

 

이 가장 좋은 모델을 불러와서 테스트하는 과정

 

best_model = tf.keras.models.load_model(CHECKPOINT_PATH) # load_model()를 이용해서 불러온 후 변수로 저장
best_model.evaluate(X_test,y_test)

 

'인공지능 > 딥러닝' 카테고리의 다른 글

딥러닝 : Time Series 데이터를 처리할 때 사용하는 resample()  (0) 2023.01.03
딥러닝 : Prophet 라이브러리를 이용한 Time Series 데이터 예측  (0) 2023.01.02
딥러닝 : Fine tuning 파인튜닝  (0) 2023.01.02
딥 러닝 : Transfer Learning ( MobileNetV2 )  (0) 2023.01.02
딥러닝 : 원본 파일을 Train / Test 파일로 분리하여 사용하는 방법과 디렉토리를 만드는 방법  (0) 2022.12.30
    '인공지능/딥러닝' 카테고리의 다른 글
    • 딥러닝 : Time Series 데이터를 처리할 때 사용하는 resample()
    • 딥러닝 : Prophet 라이브러리를 이용한 Time Series 데이터 예측
    • 딥러닝 : Fine tuning 파인튜닝
    • 딥 러닝 : Transfer Learning ( MobileNetV2 )
    왕현성
    왕현성
    AI 머신비전 학습일지

    티스토리툴바