Turi Create과 Python

  • 이번 글에서 알아볼 내용은 다음과 같다.
  • Anaconda 설치 방법 및 Conda 명령어.
  • Terminal 명령어로 ML 환경 셋업.
  • Python와 Swift 언어의 차이점.
  • Turi Create을 통한 Core ML 개발.

Anaconda 설치

  • 링크에서 설치 파일을 다운로드 한다.
  • 설치 파일을 실행한다.
sh Anaconda3-2019.07-MacOSX-x86_64.sh
  • Home 디렉토리 .zshrc 파일을 생성하고 다음 줄을 추가한다.
export PATH="/Users/<username>/anaconda3/bin":"${PATH}"

Conda 명령어

  • 설치한 Anaconda를 위한 커맨드라인 명령어를 알아보겠다.
// 새 env 생성
conda create -n <env name>

// env 복제
conda create -n <new env name> --clone <existing env name>

// env activate
conda activate <env name>

// 필요한 패키치 한 번에 설치
pip install -r requirements.txt

// Jupyter Notebook 시작
jupyter notebook <directory path>

// env deactivate
conda deactivate

// env 제거
conda remove -n <env name> --all

ML 환경 셋업

  • 이제 conda를 이용해 ML 개발을 위한 환경을 셋업 해보겠다.
  • 새로운 env를 생성한다.
conda create -n mlenv python=3.7
  • env를 활성화한다.
conda activate mlenv
  • 필요한 패키지를 설치한다.
conda install numpy pandas matplotlib seaborn scipy scikit-learn scikit-image ipython jupyter
  • Jupyter Notebook을 실행한다.
jupyter notebook

Python과 Swift

  • ML은 주로 Python이나 R 같은 프로그래밍 언어로 개발된다.
  • 필자는 Python을 사용할 예정인데, Swift와의 주요 문법 차이를 알아보겠다.
  • Python은 {} 대신 indent를 한다.
if a == b:
    print('a and b are equal')
    if a > c:
        print('and a is also greater than c')
  • Python은 nil 대신 None을 사용한다.
  • 하지만 optional 개념이 없다.
  • Python은 == 대신 is를 사용한다.
  • 변수나 상수 선언을 위해 var이나 let 같은 키워드가 필요없다.
  • Python의 List와 For Loop은 Swift와 상당히 비슷하다.
  • Python은 count 대신 len을 사용한다.
mylist = [1, 2] mylist.append(3) if mylist:
    print('mylist is not empty')

for value in mylist:
    print(value)
    
print('List length: %d' % len(mylist))

Turi Create

  • Turi Create로 Transfer Learning을 해보겠다.
  • 우선, 기존의 mlenv가 활성화된 상태에서 Turi를 설치한다.
pip install -U turicreate==5.8
  • 그리고 Jupyter Notebook을 실행한다.
jupyter notebook
  • 지금부터의 코드들은 Jupyter Notebook에서 실행 할 것이다.
  • 필요한 패키지를 불러온다.
import turicreate as tc
import matplotlib.pyplot as plt
  • 이미지 Data Set을 불러온다.
  • 해당 Data Set은 여기서 다운 받을 수 있다.
train_data = tc.image_analysis.load_images("snacks/train", with_path=True)
  • path 값을 Data로부터 불러온다.
path = train_data[0]["path"]
  • 다음 코드를 실행해 SFrame이 label이라는 새로운 열을 갖게한다.
import os
train_data["label"] = train_data["path"].apply(lambda path: os.path.basename(os.path.split(path)[0]))
  • 이제 드디어 Turi와 Train Data를 이용해 model을 생성한다.
model = tc.image_classifier.create(train_data, target="label", model="VisionFeaturePrint_Scene", verbose=True, max_iterations=50)
  • 검증하기 위한 Test Data를 불러온다.
test_data = tc.image_analysis.load_images("snacks/test", with_path=True)
test_data["label"] = test_data["path"].apply(lambda path: os.path.basename(os.path.split(path)[0]))
  • Test Data를 통해 model을 검증하고 그 결과 값을 출력해본다.
metrics = model.evaluate(test_data)
print("Accuracy: ", metrics["accuracy"])
print("Precision: ", metrics["precision"])
print("Recall: ", metrics["recall"])
print("Confusion Matrix:\n", metrics["confusion_matrix"])
  • model을 Turi Create 포맷으로 저장한다.
model.save("HealthySnacks.model")
  • 다음과 같이 model을 Core ML 형식으로 추출 할 수도 있다.
model.export_coreml("HealthySnacks.mlmodel")