목표 : 관련 공식문서 읽고 ML model 만들기
domain : 컴퓨터 프로그램영역에서의 targeted subject 를 의미. 예를들어 내가 만드는 앱이 초등학교에서 쓰이길 원한다면 내 앱의 도메인은 초등학교가 되는 것
머신러닝 모델 만드는 프레임워크!
모델을 train하기!
모델
이 recognize하도록 한다.Apple 제품에선 Photos, Siri 등에 내장된 machine learning 인프라스트럭쳐에 해당 프레임워크가 leverage하고 있다. (영향를 끼치고 있다. ) = 사진이나 자연어 모델의 train이 더 빠르다는 걸 의미(이미 해둔게 있어서 그렇다는 것 같다. )
모델 선정: ex) image classifier
image classifier는 기본적으로 scene print feature extractor 를 사용한다.
scene print feature extractor : 실제세계의 물체가 담긴 이미지를 가지고 훈련할 때 최적의 성과 내도록 해주는 것. 캐릭터 사진엔 별 효과가 없다(너무 binary해서)
데이터를 gathering하기
트레이닝에 사용할 데이터를 정리하기
데이터 셋 트레이닝 시키기
Iteration : 트레이닝 몇 번 반복할 것인지 정할 수 있음. 기본값은 25
Argumentations : Argumet정하면 트레이닝을 위해 입력한 데이터셋을 복사한 후 해당 argument에 맞게 변형한다(예를들어 Blur를 선택한 경우 데이터셋 복사 이후 이미지에 blur처리를 함)
iv. train 버튼 클릭하면 아래와 같이 나옴
v. model의 Accuracy가 충분하지 못 한 경우 더 다양한 데이터가 필요하다. (Accuracy 높이기)
vi. Preview : 트레이닝 할 때 썼던 이미지가 아닌 새로운 이미지를 추가하고 어떻게 prediction하는지 살펴보기
완성된 model을 저장한 후 Xcode project에 추가하기
i. model 파일 저장
ii. Xcode에 드래그앤 드롭으로 추가
iii. 모델에 접근하기
import CoreML
class ... {
let defaultConfig = MLModelConfiguration()
let imageModelWrapper = try? ImageModel_final(configuration: defaultConfig)
}
testing 데이터 셋의 precision이 계속 낮은데 이건 상관없는건가? 만약 상관있다면 어떻게 향상 시킬 수 있나?
MLImageClassifier 인스턴스를 사용해서 model training 작업을 진행할 수 있다. 위 방법과의 차이점은 모든 과정이 코드를 통해 이루어진 다는 것.
import CreateML
//1. Make Data set for training and testing
let trainingDataSource = MLImageClassifier
.Data
.Source(trainingData:parameters:)
let testDataSource = MLImageClassifier
.Data
.Source(...)
// Train
let matrics = evaluation(on:) 메소드 이용
(matrics의 타입 : MLClassifierMetrics)
// Access to result
matrics를 통해 접근