본문 바로가기
DNN with Keras/Other Neural Network Techniques

자동 기계 학습 (AutoML)

by goatlab 2023. 7. 24.
728x90
반응형
SMALL

자동 기계 학습 (AutoML)

 

자동 기계 학습 (Automatic Machine Learning)은 기계 학습을 사용하여 자동화를 시도한다. 데이터는 원시 형태로 AutoML 애플리케이션에 전달되고 모델이 자동으로 생성된다.

 

AutoML 어플리케이션

 

• AutoKeras

• Auto-SKLearn

• Auto PyTorch

• TPOT

• Google Cloud AutoML Tutorial

• Azure AutoML

 

AutoKeras

 

https://autokeras.com/

 

AutoKeras는 Keras 기반의 AutoML 시스템이다. AutoKeras의 목표는 모든 사람이 기계 학습에 접근할 수 있도록 하는 것이다.

 

import os
import pandas as pd

URL = "https://github.com/jeffheaton/data-mirror/"
DOWNLOAD_SOURCE = URL + "releases/download/v1/paperclips.zip"
DOWNLOAD_NAME = DOWNLOAD_SOURCE[DOWNLOAD_SOURCE.rfind('/') + 1:]

# Detect Colab if present
try:
    from google.colab import drive
    COLAB = True
    print("Note: using Google CoLab")
    %tensorflow_version 2.x
except:
    print("Note: not using Google CoLab")
    COLAB = False

if COLAB:
    PATH = "/content"
else:
    # I used this locally on my machine, you may need different
    PATH = "/Users/jeff/temp"

EXTRACT_TARGET = os.path.join(PATH, "clips")
SOURCE = os.path.join(EXTRACT_TARGET, "paperclips")

# Download paperclip data
!wget -O {os.path.join(PATH, DOWNLOAD_NAME)} {DOWNLOAD_SOURCE}
!mkdir -p {SOURCE}
!mkdir -p {TARGET}
!mkdir -p {EXTRACT_TARGET}
!unzip -o -j -d {SOURCE} {os.path.join(PATH, DOWNLOAD_NAME)} >/dev/null

# Process training data
df_train = pd.read_csv(os.path.join(SOURCE, "train.csv"))
df_train['filename'] = "clips-" + df_train.id.astype(str) + ".jpg"
# Use only the first 1000 images
df_train = df_train[0:1000]

 

AutoKeras의 한 가지 한계는 제너레이터를 직접 활용할 수 없다는 점이다. 복잡한 기술을 사용하지 않는 한 모든 학습 데이터는 RAM에 저장되어야 다. 다음 코드를 사용하여 이미지 데이터를 RAM에 로드한다.

 

import tensorflow as tf
from tensorflow import keras
import glob, os
import tqdm
import numpy as np
from PIL import Image

IMG_SHAPE = (128, 128)

def load_images(files, img_shape):
    cnt = len(files)
    x = np.zeros((cnt,) + img_shape + (3,))
    i = 0
    for file in tqdm.tqdm(files):
        img = Image.open(file)
        img = img.resize(img_shape)
        img = np.array(img)
        img = img / 255
        x[i, :, :, :] = img
        i += 1
    return x

images = [os.path.join(SOURCE, x) for x in df_train.filename]
x = load_images(images, IMG_SHAPE)
y = df_train.clip_count.values
!pip install autokeras

 

AutoKeras에는 이미지, 표 형식 및 시계열 데이터를 보여주는 몇 가지 예가 포함되어 있다. AutoKeras 연산을 결정하기 위해 몇 가지 변수를 정의한다.

 

• MAX_TRIALs : 표시할 다양한 모델 수를 결정한다.

• SEED : 다른 랜덤 시드를 사용하여 다른 결과를 얻을 수 있다.

• VAL_SPLIT : 검증에 사용해야 하는 데이터셋의 비율 (%)이다.

• EPOCHS : 훈련을 위해 각 모델을 시도할 에포치 수

• BATCH_SIZE : 훈련 배치 크기

 

MAX_TRIALs 및 EPOCHS를 설정하면 총 런타임에 큰 영향을 미친다. 시도할 모형의 수 (MAX_TRIALS)와 각 모형의 훈련 (EPOCHS)을 얼마나 깊게 시도할지 균형을 맞춰야 한다. AutoKeras는 조기 중지를 활용하므로 EPOCHS를 너무 높게 설정하면 조기 중지로 인해 EPOCHS 횟수에 도달할 수 없게 된다. 한 가지 전략은 광범위하고 얕은 검색을 수행하는 것이다. TRIALS를 높게 설정하고 EPOCHS를 낮게 설정한다. 결과 모델은 최상의 하이퍼 파라미터를 가질 가능성이 높다.

 

import numpy as np
import autokeras as ak

MAX_TRIALS = 2
SEED = 42
VAL_SPLIT = 0.1
EPOCHS = 1000
BATCH_SIZE = 32

auto_reg = ak.ImageRegressor(overwrite = True, max_trials = MAX_TRIALS, seed = 42)
auto_reg.fit(x, y, validation_split = VAL_SPLIT, batch_size = BATCH_SIZE, epochs = EPOCHS)
print(auto_reg.evaluate(x, y))
<class 'autokeras.tasks.image.ImageRegressor'>
print(type(auto_reg))
model = auto_reg.export_model()
model.summary()
<class 'keras.engine.functional.Functional'>

 

이 상위 모델을 저장하여 활용하거나 추가로 학습할 수 있다.

 

 

728x90
반응형
LIST