환경변수 설정

쉘 확인

$ echo $SHELL
/usr/bin/zsh

환경변수 추가

~/.zshrc  ~/.bashrc파일에 해당 내용추가

export PATH=$HOME/anaconda3/bin:$PATH

환경변수 적용

$ source ~/.zshrc
$ source ~/.bashrc

conda init

$ conda init zsh

현재 실행 중인 터미널을 재실행 시켜야 한다.

설치 완료 확인

$ conda --version
conda 4.9.2

 

참조: https://velog.io/@tube-jeonghoon/Ubuntu%EC%97%90-anaconda-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0

  1. 평균 제곱 오차 (Mean Squared Error, MSE):
    • 의미: MSE는 예측값과 실제 값 간의 차이(오차)의 제곱을 모든 샘플에 대해 평균화한 값입니다. 이 값이 작을수록 모델의 예측이 정확합니다. 
    • 수식: MSE = (1/n) * Σ(yi - ŷi)² (i는 샘플 인덱스, n은 샘플 수, yi는 실제 값, ŷi는 예측 값)
  2. 평균 절대 오차 (Mean Absolute Error, MAE):
    • 의미: MAE는 예측값과 실제 값 간의 절대값 차이를 모든 샘플에 대해 평균화한 값입니다. MSE와 달리 제곱하지 않으므로 이상치(outlier)에 덜 민감합니다.
    • 수식: MAE = (1/n) * Σ|yi - ŷi| (i는 샘플 인덱스, n은 샘플 수, yi는 실제 값, ŷi는 예측 값)
  3. R-squared (결정 계수, R²):
    • 의미: R-squared는 회귀 모델의 설명력을 나타내며, 예측값이 실제 값의 분산을 얼마나 잘 설명하는지를 나타냅니다. 1에 가까울수록 모델이 높은 설명력을 가집니다.
    • 수식: R² = 1 - (Σ(yi - ŷi)² / Σ(yi - ȳ)²) (i는 샘플 인덱스, yi는 실제 값, ŷi는 예측 값, ȳ는 실제 값의 평균)
  4. 평균 제곱근 오차 (Root Mean Squared Error, RMSE):
    • 의미: RMSE는 MSE의 제곱근 값으로, 예측 오차의 평균적인 크기를 나타냅니다. 미리 예측 오차의 단위와 일치시킬 수 있어 해석하기 쉽습니다.( sklearn에서 제공되지 않음)
    • 수식: RMSE = √MSE
  1. 정확도 (Accuracy):
    • 의미: 정확도는 모델이 올바르게 예측한 샘플의 비율로, 전체 예측 중 올바른 예측의 비율을 나타냅니다.
    • 사용 사례: 이진 분류(두 개의 클래스)나 다중 클래스 분류(여러 개의 클래스)에서 모델의 전반적인 성능을 평가하는 데 사용됩니다.
  2. 정밀도 (Precision):
    • 의미: 정밀도는 모델이 True로 예측한 샘플 중 실제로 True인 샘플의 비율을 나타냅니다. False Positive를 줄이는 데 중점을 둡니다.
    • 사용 사례: 거짓 긍정을 최소화해야 할 때, 예를 들어 스팸 메일 필터링에서 스팸 메일로 오진 않도록 하는 경우.
  3. 재현율 (Recall):
    • 의미: 재현율은 실제 True인 샘플 중 모델이 True로 예측한 샘플의 비율을 나타냅니다. False Negative를 줄이는 데 중점을 둡니다.
    • 사용 사례: 실제 True 샘플을 놓치지 않고 감지해야 할 때, 예를 들어 의료 진단에서 질병을 빠뜨리지 않도록 하는 경우.
  4. F1 점수 (F1 Score):
    • 의미: F1 점수는 정밀도와 재현율의 조화 평균입니다. 모델의 정확성을 평가하는 데 사용되며, 정밀도와 재현율 사이의 균형을 나타냅니다.
    • 사용 사례: 정밀도와 재현율이 중요한 균형을 가져야 하는 경우, 예를 들어 검색 엔진의 검색 결과 정확성을 향상시키는 경우.
  5. ROC 곡선 (Receiver Operating Characteristic Curve):
    • 의미: ROC 곡선은 이진 분류 모델의 성능을 시각화하는 데 사용됩니다. FPR(거짓 양성 비율) 대비 TPR(참 양성 비율)을 나타내며, 곡선 아래 영역(Area Under the Curve, AUC)이 넓을수록 모델의 성능이 우수합니다.
    • 사용 사례: 이진 분류 모델의 성능을 시각적으로 비교하고자 할 때.

목적에 따라 다르게 사용하는 지표

  • 문제 유형과 목표에 따라 다른 평가 지표가 필요함
  • 도메인 지식에 따라서도 달라질 수 있음.
  • 금융 분야: 리스크 최소화가 중요하므로 정확도 보다는 정밀도나 재현율을 높이는 것이 중요
  • 데이터 불균형: 클래스 불균형이 있는 경우 정확도만으로 모델의 성능을 판단하기 어려움. 정밀도, 재현율, F1 score 등을 고려해야함.

'Data Scientist > Machine Learning' 카테고리의 다른 글

이상치 탐지 및 시각화 (코드 예제 포함)  (0) 2023.07.24
[ML] 벡터의 개념  (0) 2022.07.04
[ML] 경사하강법  (0) 2022.07.04
[ML] XGBoost  (0) 2022.03.31
[ML] 앙상블 기법  (0) 2022.02.09

1. 이상 탐지(Anomaly detection)

이상 탐지(anomaly detection)란 자료에서 다른 패턴을 보이는 자료를 찾는 것을 말합니다. 이런 데이터를 이상값(anomaly)라 하며 이상 탐지는 사기 탐지, 침입 탐지, 안전 관리를 포함한 다양한 분야에 널리 활용된다.

2. 이상의 종류

2.1. Point anomaly

데이터셋 내에 하나의 데이터가 나머지에 대해 이상하다고 판단되는 경우, 흔히 아웃라이어(Outlier)라고 부른다.

2.2. Collective anomaly

데이터셋 내에 여러 데이터 포인트가 이상하다고 판단되는 경우

2.3. Contextual anomaly

전체적인 데이터셋의 맥락을 고려했을때 이상하다고 판단되는 경우

3. Isolation forest

Isolation forest는 기본적으로 데이터셋을 의사결정나무(Decision Tree) 형태로 표현해 정상값을 분리하기 위해서는 의사결정나무를 깊숙하게 타고 내려가야 하고, 반대로 이상값은 의사결정나무 상단부에서 분리할 수 있다는 것을 이용한다.

이 특성을 사용해 의사결정나무를 몇 회 타고 내려가야 분리되는가를 기준으로 정상과 이상을 분리한다.

Isolation forest의 장점

  • 군집기반 이상탐지 알고리즘에 비해 계산량이 매우 적다
  • 강건한(Robust)한 모델을 만들 수 있다

# Isolation forest 구현 코드 예제

from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import IsolationForest

df3 = df3.set_index('regdate-display') # 시간 컬럼 넣기
df3 = df3[['msg.base_state.curr-temperature']]  # 데이터 프레임의 원하는 컬럼 넣기

outliers_fraction = float(.01)
scaler = StandardScaler()
np_scaled = scaler.fit_transform(df3.values.reshape(-1, 1))
cast_scaled_df = pd.DataFrame(np_scaled)
model = IsolationForest(contamination=outliers_fraction)
model.fit(cast_scaled_df)
df3['anomaly'] = model.predict(cast_scaled_df)

위 예제는 한 컬럼의 이상치 탐지를 위한 코드이다. 먼저 standartscaler로 표준화 시킨 후 Isolation forest를 진행했다. 

데이터셋의 값이 들쑥날쑥하거나, 매우 큰 경우에는 cost의 값이 발산하여 정상적인 학습이 이루어지지 않기 때문이다!

# 이상치 탐지 시각화 코드

#시각화
fig, ax = plt.subplots(figsize=(10,6))
a = df3.loc[df3['anomaly'] == -1, ['msg.base_state.curr-temperature']] #anomaly

bbox = dict( ## 텍스트 박스 스타일 지정
    boxstyle='square',
    facecolor='white', 
)

line_plot = ax.plot(df3.index, df3['msg.base_state.curr-temperature'], color='black', label = 'Normal')
ax.scatter(a.index,a['msg.base_state.curr-temperature'], color='red', label = 'Anomaly')
line_plot = line_plot[0] # 선 그래프 요소

y = list(a['msg.base_state.curr-temperature'])
new_coord = []
for i in range(len(y)):
    for coord in list(line_plot.get_xydata()):
        if coord[1] == y[i]:
            new_coord.append([coord[0],y[i]])
            
for cor in new_coord:
    ax.text(cor[0],cor[1]+2,f'{int(cor[1])}',fontsize=12, ha='center', label = 'Anomaly', bbox=bbox) 

ax.set_xlabel('time', fontsize = 14)
ax.set_ylabel('msg.base_state.curr-temperature', fontsize = 14)
ax.set_title("이상치 탐지 시각화", fontdict={'fontsize': 14} )
plt.show()
fig.savefig(output_path + 'CART_anomaly_detect.png')

결과 이미지는 아래와 같이 그래프에서 이상치가 어디에 있고 값은 어떤지 상위에 박스로 표시할 수 있도록 했다. 

만약에 위 그래프를 그릴 때 한글이 깨진다면 아래 코드를 실행시키면 된다.

# 한글 폰트 깨짐 방지 코드
import matplotlib as mpl
import matplotlib.font_manager as fm

# print(mpl.matplotlib_fname()) # 디렉토리 확인하기

normal_font = fm.FontEntry(fname=os.path.join('{디렉토리 확인한 후 경로 넣기}', 'NanumGothic.otf'), name='NanumGothic')
fm.fontManager.ttflist.append(normal_font)
mpl.rcParams['font.family'] = normal_font.name


bold_font = fm.FontEntry(fname=os.path.join('/home/srjung/.local/lib/python3.10/site-packages/matplotlib/mpl-data/matplotlibrc', 'NanumBoldGothic.otf'), name='NanumBoldGothic')
fm.fontManager.ttflist.append(bold_font)

plt.rcParams['axes.unicode_minus'] = False

 

참고: Isolation Forest (for anomaly detection) (tistory.com)

'Data Scientist > Machine Learning' 카테고리의 다른 글

모델 성능 평가 지표와 사용 목적  (0) 2023.09.19
[ML] 벡터의 개념  (0) 2022.07.04
[ML] 경사하강법  (0) 2022.07.04
[ML] XGBoost  (0) 2022.03.31
[ML] 앙상블 기법  (0) 2022.02.09

RNN이란?

  •  recurrent neural networks의 약자, 한국어로 순환 신경망
  • 고정 길이 입력이 아닌 임의 길이를 가진 시퀀스를 다룰 수 있음 
    • STT, 자동 번역과 같은 NLP 작업에도 유용

RNN 구조 

  •  각 타임 스텝 t(또는 프레임)마다 \(x_{(t)}\)와 이전 타임 스텝의 출력인 \(y_{(t-1)}\)을 입력받음.
  • 첫번째 타임 스텝은 이전 출력이 없으므로 0으로 설정
  • 역전파 이용 (BPTT) -> 현재 메모리 셀이 예측한 값이 실제값과 차이(=error)가 나면 이는 이전의 메모리 셀에서 잘못한 것이라고 생각
  • 가중치가 각 메모리 셀마다 다른 값을 가지는 것이 아니라 정방향 패스 동안 모든 타임 스텝이 동일한 가중치 행렬을 공유

예제 코드 참고: RNN 개념 잡고 간단 예제 코드 돌려보기 (2) (tistory.com)

포트번호 확인

$ netstat -nap | grep {포트번호}
  ex) netstat -nap | grep 8080

삭제하기

fuser -k -n tcp {포트번호}

 

정량 데이터

: 데이터가 얼마나 많은 행동이 일어나고 있는지 알려줌

 

기술통계

: 데이터의 특성을 파악하는데 활용

 

  1) 평균, 중앙값(극단값이 많을 경우 사용), 최빈값, 빈도

      note. 평균값과 중앙값이 차이가 많이날수록 극단값이 많이 존재하는 것이겠군!

  2) 데이터 시각화 방법

     : 범주형 데이터 - 파이 차트와 누적 막대그래프/ 수치형 데이터 - 막대그래프와 선 그래프/ 방사형 그래프와 산점도

 

추론 통계

: 데이터 정규성이 가정되었을때 표본을 통해 모집단을 추론하거나 가설을 검정하기 위한 방법

    ! 알아가고 넘어갈 개념.

     - 모집단(population): 전체 사용자 집단

     - 표본(sample): 사용자 조사의 참가자(일부 사용자)

     --> 표본이 모집단을 대표할 수 잇는지 검증하는 과정이 추론 통계! 

          모수 통계(parametric statistics): 검증하는 과정에서 표본으로 수집된 데이터가 정규성이 확보되는지 확인(정규분포)

      --> 분석 결과가 통계적으로 유의미한지 검증 : p-value가 0.05이하인지 확인

            = 표본에서 관찰된 결과가 모집단에서 다시 샘플링해 측정해도 다른 결과가 나타날 가능성이 20번 중에 1번보다 적다는 것을 의미

           

  1) t 검정과 분산분석(ANOVA)

      : 집단 간의 차이를 밝히는 분석 방법

      - 검정 통계량(Statistic) 계산: 일반적으로 두 집단의 평균의 차이를 표준 오차로 나눈 t-값을 사용

                                                     (두 집단의 평균, 표준 편차, 샘플 크기를 사용하기도 함)

                                                     비교 대상이 2개일 경우 t- score를 통해 검증

      - 분산분석(ANOVA): 비교대상 2개 초과하면 분산분석을 통해 분석

                                        p-value가 0.05 이하여도 어느 그룹에서 차이가 있었는지 파악하기 위해 사후 검증의 과정 필요

 2) 상관 분석과 회귀 분석

     : 변수들 간의 관계 파악하는데 사용

     - 상관 분석: 2개 이상의 변수들의 선형적인 관계를 살펴보기 위한 분석방법

  • p-value 값: 변수들 간의 관계가 유의미한 관련이 있는지에 대한 검증 결과
  • 상관계수 r값: 변수들 간의 관계가 긍정인지 부정인지, 얼마만큼 연관되어 있는지 나타냄

     - 회귀 분석: 하나의 종속변수에 대해 다수의 독립변수들이 어떻게 영향을 미치는지에 대한 인과 관계를 분석할 때 많이 활용되는 방법

  • p-value 값: 회귀 모형의 적합도
  • R^2: 모델 설명력
  • 회귀계수(beta): 각 독립변수가 종속변수에 미치는 영향력

 

정성데이터

: 행동이 일어난 이유에 대해 알려줌

 

참조:사용자 데이터를 효과적으로 분석하는 법 | 요즘IT (wishket.com)

'Data Scientist > Statistics' 카테고리의 다른 글

로그 정규분포  (0) 2021.04.07

python경로가 온전치 못해 발생하는 에러. 검색해도 안나와서 오래걸렸다..

아래 두 줄 명령어 순서대로하면 해결됨

 

PYTHON_BIN_PATH="$(python3 -m site --user-base)/bin"
PATH="$PATH:$PYTHON_BIN_PATH"

    1. Model Experiment Pipeline

    출처: https://ml-ops.org/content/mlops-principles

    MLops의 프로세스에는 1. ML 기반의 프로젝트 Design 하는 단계, 2. 머신러닝 실험하고 개발하는 단계, 3. 모델을 product로 배포하고 운영하는 단계가 있습니다. 이때 실험하고 개발하는 단계에 많은 리소스가 소모될 수 있습니다. 예를 들어 주어진 task에 맞춰서 성능을 높이거나, 모바일 기기에 배포가 된다고 하면 하드웨어 성능까지 고려해야 합니다. 이번 글에서는 MLops의 2번째 단계인 머신러닝을 실험에 도움을 주는 Tool에 대해서 살펴볼 예정입니다.

    1) 필수 구성 요소

    머신러닝을 구축하려면 여러가지 구성요소(configuration)가 필요합니다. 그 중 대표적인 요소에 대해 살펴보겠습니다.

    • Dataset
    • 머신러닝 모델을 학습 시키기 위한 데이터.
    • Metric
    • 모델의 성능을 측정을 위한 평가 지표.
    • Model
    • 해결하고자 하는 Task의 종류와 Data의 특성에 맞는 알고리즘.
    • Hyper-parameter
    • 모델링 성능을 높이기 위해 사용자가 직접 세팅해주는 값.

    2) 모델 실험

    머신러닝 혹은 딥러닝 모델을 학습할 때, configuration 값을 적절하게 선택해야합니다. 예를 들어 모델의 파라미터를 최적화 시키려면 hyper-parameter를 적절하게 선택해야 합니다. 하지만 처음부터 완벽한 값을 찾기는 어렵습니다. 우리가 원하는 결과를 얻기 위해서는 여러가지 hyper-parameter 값을 변경하며 다양한 실험을 해야 합니다.

    제 경우에 일일이 hyper-parameter를 변경하며 학습 경과를 지켜봤습니다. loss가 수렴이 안되면 learnig_rate를 줄이는 식으로 진행했습니다. 하지만 학습자가 직관적으로 값을 변경하는 경우 다음과 같은 문제점이 발생합니다.

    • hyper-parameter를 변경하고, 성능을 체크하고, 다른 값으로 바꾸는 과정은 매우 비효율적이다.
    • 실험이 많아지고 복잡해지면, 기록이 누락되고 방향을 잃을 수 있다.
    • 여러 실험 결과를 비교하기 위해 정리하는 과정이 번거롭다.

    제가 경험한 문제를 나열했지만, 이 외에도 다양한 문제점이 있을 수 있습니다. 이러한 문제점을 해결하고 효율적인 학습을 할 수 있게 만드는 WandB라는 Tool을 소개하고자 합니다.

    2. WandB 란?

    WandB(Weights & Biases)란 더 나은 모델을 빨리 만들 수 있도록 도와주는 머신러닝 Experiment tracking tool입니다.

    (다양한 하이퍼파라미터를 쉽게 모니터링할 수 있는 툴)

    1) 주요 기능

    Weights & Biases의 Document 첫 페이지를 보면 위와 같은 그림으로 W&B를 설명하고 있습니다. W&B Platform은 5가지 유용한 도구를 제공하고 있습니다.

    W&B Platform

    • Experiments
    • 머신러닝 모델 실험을 추적하기 위한 Dashboard 제공.
    • Artifacts
    • Dataset version 관리와 Model version 관리.
    • Tables
    • Data를 loging하여 W&B로 시각화하고 query하는 데 사용.
    • Sweeps
    • Hyper-parameter를 자동으로 tuning하여 최적화 함.
    • Reports
    • 실험을 document로 정리하여 collaborators와 공유.

    위에서 정리한 5가지 기능을 통해 여러 사람과 협업하고, 효율적인 프로젝트 관리를 할 수 있습니다. 또한 여러 Framework와 결합이 가능해 확장성이 뛰어나다는 장점을 가지고 있습니다. 이번 글에서는 Experiments에 대해서 소개드리겠습니다. Experiments 기능은 모델을 학습할 때, 모델 학습 log를 추적하여 Dashboard를 통해 시각화를 해줍니다. 이를 통해서 학습이 잘 되고 있는지 빠르게 파악할 수 있습니다.

    2) 가격정책

    WandB의 가격은 Basic, Standard, Advanced로 나눌 수 있습니다. 제 경우 개인 프로젝트를 진행하기 때문에 Basic이 무료라는 사실에 더 눈길이 가네요. Basic은 개인 프로젝트 일 경우 무제한으로 사용할 수 있고, 100GB의 저장 공간을 지원해줍니다! 개인 프로젝트를 무제한으로 실험 할 수 있다니 반갑네요.

    3. 사용 방법

    1) 회원 가입하기

    회원가입의 경우 홈페이지의 메인 화면에서 손쉽게 할 수 있습니다. 노란색 버튼(sign up)을 누르면 다음 화면으로 넘어갑니다.

    여기서 구글 아이디 혹은 Github 아이디가 있다면 손쉽게 가입할 수 있을 것입니다.

    2) project 생성하기

    회원가입을 하고 인증 메일에서 Confirm my account가 완료 되면, project의 main 화면이 뜹니다.

    Create new project를 눌러서 새로운 프로젝트를 생성해봅시다.

    저는 test-pytorch라는 이름으로 설정하겠습니다.

    3. Pytorch Tutorial with WandB

    WandB를 이용한 간단한 프로젝트를 진행하면서 설명드리겠습니다. 실습 노트북은 포스트 상단에 있는 링크를 클릭하시면 이동할 수 있습니다.

    1) wandb login

    import wandb
    
    wandb.login()
    

    우선 wandb를 server와 연결 시키려면 login을 해야되요. wandb.login()을 실행하면 다음과 같은 화면이 나옵니다.

    이때 빈칸에 API key를 입력해야되요. key는 파란색으로 표시된 링크로 들어가시면 받을 수 있어요. 아래 API key의 화면에서 복붙을 하시면 됩니다.

    API key 예시

    wandb login이 완료되었다면 다음에는 login을 굳이 하지 않아도 되요!

    2) config setting

    config  = {
        'epochs': 5,
        'classes':10,
        'batch_size': 128,
        'kernels': [16, 32],
        'weight_decay': 0.0005,
        'learning_rate': 1e-3,
        'dataset': 'MNIST',
        'architecture': 'CNN',
        'seed': 42
        }
    

    wandb를 실행시키려면 config 파일이 필요해요. 모델의 하이퍼파라미터, 데이터명 등 학습에 필요한 구성들을 그룹화합니다. 또 이 config 파일은 sweep을 할 때 중요하게 사용 됩니다. sweep에 대해서 궁금하신 분들은 아래 링크를 참고하세요~

    2. Sweep이란? - Hyper Parameter 최적화 Tool

    3) dataset 함수

    def make_loader(batch_size, train=True):
        full_dataset = datasets.MNIST(root='./data/MNIST', train=train,
                                        download=True,  transform=transforms.ToTensor())
    
        loader = DataLoader(dataset=full_dataset,
                            batch_size=batch_size,
                            shuffle=True,
                            pin_memory=True, num_workers=2)
        return loader
    

    이번 프로젝트에서는 MNIST 데이터를 사용할 예정입니다. pytorch에서는 torchvision이라는 모듈에서 MNIST dataset을 제공해주기 때문에 쉽게 불러올 수 있습니다.

    4) model 함수

    class ConvNet(nn.Module):
        def __init__(self, kernels, classes=10):
            super(ConvNet, self).__init__()
    
            self.layer1 = nn.Sequential(
                nn.Conv2d(1, kernels[0], kernel_size=5, stride=1, padding=2),
                nn.ReLU(),
                nn.MaxPool2d(kernel_size=2, stride=2))
            self.layer2 = nn.Sequential(
                nn.Conv2d(16, kernels[1], kernel_size=5, stride=1, padding=2),
                nn.ReLU(),
                nn.MaxPool2d(kernel_size=2, stride=2))
            self.fc = nn.Linear(7 * 7 * kernels[-1], classes)
    
        def forward(self, x):
            out = self.layer1(x)
            out = self.layer2(out)
            out = out.reshape(out.size(0), -1)
            out = self.fc(out)
            return out
    

    모델은 간단하게 scratch로 구현하였습니다. wandb는 모델의 weights와 biases와 같이 파라미터를 추적할 수 있는 대시보드를 제공하는 장점이 있습니다.

    5) train 함수

    def train(model, loader, criterion, optimizer, config):
        wandb.watch(model, criterion, log="all", log_freq=10)
    
        example_ct = 0
        for epoch in tqdm(range(config.epochs)):
            cumu_loss = 0
            for images, labels in loader:
    
                images, labels = images.to(device), labels.to(device)
    
                outputs = model(images)
                loss = criterion(outputs, labels)
                cumu_loss += loss.item()
    
                optimizer.zero_grad()
                loss.backward()
    
                optimizer.step()
    
                example_ct +=  len(images)
    
            avg_loss = cumu_loss / len(loader)
            wandb.log({"loss": avg_loss}, step=epoch)
            print(f"TRAIN: EPOCH {epoch + 1:04d} / {config.epochs:04d} | Epoch LOSS {avg_loss:.4f}")
    

    train 함수에서는 model, loader, criterion, optimizer, config을 매개변수로 받아서 학습을 진행합니다. tqdm을 사용해서 진행 속도를 시각화 했습니다. 그리고 wandb.log() 함수가 loss 그래프를 시각화 할 수 있도록 도와주는 함수입니다. 여기선 epoch을 step으로 받고 avg_loss를 기록하고 있네요.

    6) run 함수

    def run(config=None):
        wandb.init(project='test-pytorch', entity='pebpung', config=config)
    
        config = wandb.config
    
        train_loader = make_loader(batch_size=config.batch_size, train=True)
        test_loader = make_loader(batch_size=config.batch_size, train=False)
    
        model = ConvNet(config.kernels, config.classes).to(device)
        criterion = nn.CrossEntropyLoss()
        optimizer = torch.optim.Adam(model.parameters(), lr=config.learning_rate)
    
        train(model, train_loader, criterion, optimizer, config)
        test(model, test_loader)
        return model
    

    모든 합수가 정의 됐다면 wandb를 실행시키는 일 만 남았습니다. 위의 함수를 실행 시키면 학습이 진행되면서 wandb에 기록이 됩니다. 그 전에 wandb.init()을 정의해야합니다.

    wandb.init() 함수는 wandb web 서버와 연결 시켜주는 기능을 합니다. project name과 wandb id를 적어주시면 됩니다. 그리고 미리 설정된 config 값을 받아서 저장 시켜둡니다.

    4. 결론 및 정리

    wandb와 watch와 log는 Dashboard에서 실험 log를 시각화하는 역할을 수행합니다. 대표적으로 각 layer에 전파되는 gradients 값을 확인할 수 있습니다. 해당 name은 model의 변수명을 기반으로 작성됩니다. 마우스를 가지고 가면 X축(epoch)에 해당하는 gradient의 단면을 그래프로 확인하실 수 있습니다. 이렇게 학습 기록과 모델의 파라미터를 시각화할 수 있다면 모델 분석을 하기에 매우 유리합니다. Vanishing 문제와 Exploding 문제가 발생하면 즉각 발견할 수 있고 인터넷만 있다면 어디서든 실시간으로 학습 log를 확인할 수 있습니다. 이렇듯 WandB는 머신러닝 학습 과정을 추적하고 시각화하여 프로젝트 관리에 매우 유용한 Tool입니다. 이러한 MLops 패키지를 활용한다면 Kaggle 대회, 개인 프로젝트 등 실험을 할 때 효율적으로 사용될 것입니다.

    또한 WandB에는Sweep이라는 hyper-parameter optimization Tool이 존재합니다. 맨 앞에서 언급했던 것 처럼 일일이 사람이 hyper-parameter를 tuning하는 작업은 매우 비효율적입니다. 다음 글에서는 hyper-parameter란 무엇인지 설명하고 Sweep을 다뤄보겠습니다.

     

     

     

    출처:

    1. WandB란? - 강력한 MLOps Tool · ML감자 (pebpung.github.io)

    - 문제

    https://school.programmers.co.kr/learn/courses/30/lessons/155652

     

    프로그래머스

    코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

    programmers.co.kr

    - 코드 및 문제 풀이

     

    from string import ascii_lowercase

    a= list(ascii_lowercase)

     

    를 하면 소문자 알파벳을 순서대로 나열한 리스트가 생성된다. 라이브러리를 알고 있으면 편리하니까 외우도록 하기!!

    from string import ascii_lowercase
    
    def solution(s, skip, index):
        al_list = list(ascii_lowercase)
        answer = []
    
        for i in range(len(skip)):
            del al_list[al_list.index(skip[i])]
    
        for i in range(len(s)):
            ans = al_list[(al_list.index(s[i])+index) %len(al_list)]
            answer.append(ans)
    
        return ''.join(answer)

     

    먼저 컨테이너란, 우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술이다.

     

    PC에 프로그램을 설치할 때 특정 경로에 맞춰 설치해야 하거나 내 컴퓨터에 필요한 옵션을 일일히 맞추느라 힘들었을 것이다. 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램을 실행할 수 있도록 도와주는 기술이다. 컨테이너 환경을 묵어서 배포한 컨테이너 이미지라는 프로그램을 내려받아 구동하면 실행되서 간편하다. 

     

    컨테이너를 쉽게 내려받거나 공유하고 구동할 수 있도록 도와주는 도구컨테이너 런타임을 사용한다. 그 중 가장 유명한 것이 도커이다. 

     

    쿠버네티스컨테이너 런타임을 통해 여러 서버에 컨테이너를 분산해서 배치하거나, 상태 관리 및 컨테이너의 구동환경을 관리해주는 도구이다. 이것을 컨테이너 오케스트레이션이라고 한다.

     

     

    1. Traditional Deployment(전통적 배포):

    - 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식

    - PC 한 대에 윈도우를 하나 설치하고, 여러 가지 게임이나 워드프로세서 등을 깔아서 사용하는 것과 비슷한 방식

    - 가장 오래되고 단순한 방식

     

    2. Virtualized Deployment(가상화 배포):

    - 가상머신(Virtual Machine)을 기반으로 배포를 하는 방법

    - 하이퍼바이저: 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해 주는 중간 계층을 의미

    -  App: 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일

    - 가상머신은 완전한 컴퓨터이고 가상머신에 일일이 운영체제(OS)를 설치해야 하기 때문에 컨테이너 중심의 배포(Container Deployment)보다는 무거운 편

     

    3. Container Deployment(컨테이너 중심의 배포):

    - 컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없음

    -  OS는 하나만 사용

    - 핵심 기술: 같은 OS 상에서 구동되는 프로그램이지만 게임 및 인터넷 프로그램은 서로 다른 컴퓨터에서 깔려있다고 생각하게 함. 즉, 두 프로그램 간에 간섭을 일으킬 수 없음. 이래서 OS에 문제가 일어날 경우, OS에서 구동 중인 전체 컨테이너의 문제가 될 가능성이 있음. 

     

     

    참고: https://www.samsungsds.com/kr/insights/220222_kubernetes1.html

    + Recent posts