Section 8/151 menit
8. Create ML — Training Model di Mac dan iPad
8. Create ML — Training Model di Mac dan iPad
Image Classifier
swift
import CreateML
import Foundation
// Buat image classifier dari labeled folder structure:
// Training/
// ├── cat/
// │ ├── cat1.jpg, cat2.jpg, ...
// └── dog/
// ├── dog1.jpg, dog2.jpg, ...
func trainImageClassifier() async throws {
let trainingDataURL = URL(fileURLWithPath: "/Users/dev/TrainingData")
let validationDataURL = URL(fileURLWithPath: "/Users/dev/ValidationData")
let trainingData = MLImageClassifier.DataSource.labeledDirectories(
at: trainingDataURL
)
let validationData = MLImageClassifier.DataSource.labeledDirectories(
at: validationDataURL
)
var parameters = MLImageClassifier.ModelParameters(
featureExtractor: .scenePrint(revision: 2), // transfer learning dari Scene Print
validation: .dataSource(validationData),
maxIterations: 25,
augmentationOptions: [.flip, .rotate, .blur, .crop, .noise]
)
let classifier = try await MLImageClassifier(
trainingData: trainingData,
parameters: parameters
)
// Evaluasi
let trainingAccuracy = classifier.trainingMetrics.classificationError
let validationAccuracy = classifier.validationMetrics?.classificationError
print("Training accuracy: \(1 - (trainingAccuracy ?? 0))%")
print("Validation accuracy: \(1 - (validationAccuracy ?? 0))%")
// Save model
let outputURL = URL(fileURLWithPath: "/Users/dev/MyClassifier.mlmodel")
try classifier.write(to: outputURL, metadata: MLModelMetadata(
author: "Company iOS Team",
shortDescription: "Product photo classifier",
version: "1.0"
))
}
Text Classifier
swift
import CreateML
func trainTextClassifier() async throws {
// Training data: CSV dengan kolom "text" dan "label"
let trainingURL = URL(fileURLWithPath: "/Users/dev/support_tickets.csv")
let trainingData = try MLDataTable(contentsOf: trainingURL)
var parameters = MLTextClassifier.ModelParameters(
validation: .split(strategy: .stratified, proportion: 0.1),
maxIterations: 15,
algorithm: .maxEnt(revision: 1)
)
let classifier = try await MLTextClassifier(
trainingData: trainingData,
textColumn: "text",
labelColumn: "category",
parameters: parameters
)
print("Training accuracy: \(classifier.trainingMetrics.accuracy * 100)%")
let outputURL = URL(fileURLWithPath: "/Users/dev/SupportClassifier.mlmodel")
try classifier.write(to: outputURL)
}
Sound Classifier
swift
import CreateML
func trainSoundClassifier() async throws {
// Struktur folder:
// SoundData/
// ├── cough/
// │ ├── cough1.wav, cough2.wav, ...
// └── sneeze/
// ├── sneeze1.wav, ...
let trainingDataURL = URL(fileURLWithPath: "/Users/dev/SoundData")
let trainingData = MLSoundClassifier.DataSource.labeledDirectories(
at: trainingDataURL
)
var parameters = MLSoundClassifier.ModelParameters(
validation: .split(strategy: .stratified, proportion: 0.15),
maxIterations: 25,
algorithm: .audioFeaturePrint // transfer learning untuk audio
)
let classifier = try await MLSoundClassifier(
trainingData: trainingData,
parameters: parameters
)
print("Accuracy: \(classifier.trainingMetrics.classificationError)")
let outputURL = URL(fileURLWithPath: "/Users/dev/SoundClassifier.mlmodel")
try classifier.write(to: outputURL)
}