코딩일기

[머신러닝 파이프라인] 실험관리(feat. Weights and Biases) 본문

Code/머신러닝(ML)

[머신러닝 파이프라인] 실험관리(feat. Weights and Biases)

daje 2021. 12. 7. 13:53
728x90
반응형

 

 

 

이미지 출처 : wandb.ai / 홈페이지 첫 화면

 

 

 

안녕하십니까 다제입니다. 

 

오늘은 머신러닝 파이프라인을 쉽고 유용하게 관리할 수 있는 툴을 소개하고자 합니다. 

 

해당 내용은 inflearn에서 수업을 듣고 제가 직접 정리한 내용입니다. 

 

Tensorflow의 Tensorboard와 비슷한데, 이 도구는 Framework indepedent한 성격을 지니고 있어 Tensorflow, pytorch 등에서도 자유롭게 사용할 수 있습니다. 

 

 

1. 실험관리 개요

-. 실험관리를 통해 실험내역을 체계적으로 관리하고자 합니다. 

-. 머신러닝은 열심히하고 시간을 투자한다고 해서 성공하지 않습니다. 실패를 했다면 그 실패 결과를 가지고도 결과보고서를 만들고 성과로 입증하는 과정이 필요합니다. 이에 실험관리는 필수입니다.  

 

 

2. Weights and Biases 소개

-. Weights and Biases는 미국의 스타트업이고 머신러닝 프로젝트의 실험관리 솔루션을 제공해주고 있습니다. 

-. 개인적으로 사용하는 건 무료지만, 기업 단위는 별도의 가격 정책을 갖고 있습니다. ( 꽤..비쌉니다.. )

-. 실시간으로 퍼포먼스 디버깅이 가능합니다. 

 

3. Tutorial 

-. wandb 들어가보시면 면 colab 튜토리얼 파일이 있습니다. 스크롤을 내리시면 "Try A LIVE NOTEBOOK"이라는 하이퍼링크를 발견하실 수 있습니다. 

# wandb 설치 
!pip install wandb -q 

# 로그인 
!wandb login -> 개인 시리얼키를 클릭하면 됩니다. 

# wandb 세팅을 위한 설치 
import wandb 
wandb.init(project="wandb-tutorial",
           config={
                  "layer_1_activation":"relu", 
                  "layer_1":128,
                   "learning_rate":0.01,
                   "dropout_rate": 0.2
            })

# 위 설정한 config를 config라는 변수에 담아주도로 하겠습니다. 
config = wandb.config

# wandb에 로그를 찍기 위해서 tensorflow와 wandb를 연결해주어야 합니다. 
# 이때 사용되는 라이브러리가 WandbCallback이고 이를 model.fit에 넣어주면 됩니다. 
from wandb.keras import WandbCallback

# 데이터셋은 tf에서 제공하는 minst를 사용하도록 하겠습니다. 
import tensorflow as tf 
minst = tf.keras.datasets.mnist 
(train_x, train_y), (test_x, test_y) = minst.load_data()

# 데이터 전처리 
train_x, test_x = train_x / 255.0, test_x / 255.0

# model settings
model = tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(config.layer_1, activation=config.layer_1_activation), # 기존에는 128이라는 직접적인 숫자를 넣어주었지만, 이제는 config.layer_1이라고 수정합니다. 
    tf.keras.layers.Dropout(config.dropout_rate), 
    tf.keras.layers.Dense(10, activation="softmax")
])

# 기존에는 optimizer="adam", 기재하였으나 이는 learning_rate를 직접 지정할 수 없습니다. 
# optimzier=tf.keras.optimizers.Adam(learning_rate=config.learning_rate)라고 수정해줍니다. 
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=config.learning_rate), 
              loss="sparse_categorical_crossentropy",
              metrics=["accuracy"])

# model fit 
model.fit(train_x, train_y, epochs=5, callbacks=[WandbCallback()])

# model evaluation 
model.evaluate(test_x, test_y) 

# 위와 같이 실행을 하게 되면 별도의 링크가 생성되며, 그곳에서 모델 성능 지표를 일괄적으로 확인이 가능합니다.

 

아래 그래프는 wandb를 사용하고 생성된 링크에서 직접 캡쳐해온 이미지 입니다. 

이미지 출처 : 직접 제작 

 

 

이 외에도 다양한 기능들이 있었습니다. 오늘은 간단하게 어떻게 적용하고 사용하는지에 대한 내용을 다루어보았습니다.

 

대규모의 프로젝트가 아니라면 이정도 선에서 하이퍼파라미터 등을 관리하면 된다고 수업시간에 듣게 되었습니다. 

 

저도 더 가지고 놀아보고 좋은 기능들이 있다면 소개드리겠습니다. 

 

감사합니다. 

 

728x90
반응형
Comments