- 이번 글에서 알아볼 내용은 다음과 같다.
- 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를 위한 커맨드라인 명령어를 알아보겠다.
conda create -n <env name>
conda create -n <new env name> --clone <existing env name>
conda activate <env name>
pip install -r requirements.txt
jupyter notebook <directory path>
conda deactivate
conda remove -n <env name> --all
ML 환경 셋업
- 이제 conda를 이용해 ML 개발을 위한 환경을 셋업 해보겠다.
- 새로운 env를 생성한다.
conda create -n mlenv python=3.7
conda activate mlenv
conda install numpy pandas matplotlib seaborn scipy scikit-learn scikit-image ipython jupyter
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 = 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 = 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")