Arduino Makine Öğrenimi Sınıflandırıcı Eğitimi
Arduino geliştirme kartlarında ve benzer mikroişlemcilerde makine öğrenimine mi başlıyorsunuz ? Python’da eğittiğiniz modeli Arduino, STM32, ESP32 gibi herhangi bir C++ projesinde çalıştırmak ister misiniz?
Bu içerikte size bunun ne kadar kolay olduğunu göstereceğiz.
Verileri Yüklemek
Bir sınıflandırıcıyı eğitmek için bazı verilere ihtiyacımız var. Sıfırdan başlıyorsanız ve hali hazırda tercih ettiğiniz bir klasör yapısına sahip değilseniz, topladığınız verileri tutacak bir klasör oluşturmanızı öneririz.
Bu klasörün içinde, sınıflandırmak istediğiniz sınıfların her biri için her satıra bir örnek koyarak .csv uzantılı özel bir dosya oluşturun. Bunu yaptıysanız, bu verileri yüklemek için sonraki işlevi kullanabilirsiniz.
import numpy as np from glob import glob from os.path import basename def load_features(folder): dataset = None classmap = {} for class_idx, filename in enumerate(glob('%s/*.csv' % folder)): class_name = basename(filename)[:-4] classmap[class_idx] = class_name samples = np.loadtxt(filename, dtype=float, delimiter=',') labels = np.ones((len(samples), 1)) * class_idx samples = np.hstack((samples, labels)) dataset = samples if dataset is None else np.vstack((dataset, samples)) return dataset, classmap
Sınıflandırıcıyı Eğitmek
Verilere sahip olduğumuzda, sınıflandırıcıyı eğitebiliriz.
micromlgen
paketi (makine öğrenimi sınıflandırıcılarını düz C koduna taşıyabilen paket) aşağıdaki sınıfları destekler:
- Karar Ağacı(Decision Tree)
- Random Forest
- XGBoost
- Gauss NB
- Support Vector Machines(SVM)
- Relevance Vector Machines(RVM)
- SEFR
Bu yazıda Random Forest sınıfını kullanacağız, ancak kodun geri kalanını değiştirmeden diğer sınıflarla değiştirebilirsiniz.
from sklearn.ensemble import RandomForestClassifier def get_classifier(features): X, y = features[:, :-1], features[:, -1] return RandomForestClassifier(20, max_depth=10).fit(X, y)
Düz C Kodunu Dışa Aktarmak
Artık micromlgen
paketi kullanarak eğitilmiş sınıflandırıcıyı düz C koduna dönüştürebiliriz.
pip install micromlgen
from micromlgen import port if __name__ == '__main__': features, classmap = load_features('your-data-folder') classifier = get_model(features) c_code = port(classifier, classmap=classmap) print(c_code)
Arduino projenize aktarmanız gereken kod budur. Bu içerikteki öğreticilerle bütünlük sağlamak için, bu kodu model.h adlı bir dosya şeklinde kaydedin.
Projede Kullanmak
Artık doğrudan mikrodenetleyicimizde Makine Öğrenimini çalıştırmak için ihtiyacımız olan koda sahibiz.
// 3. adımda aldığınız kodu bu dosyaya koyun #include "model.h" // başka bir sınıflandırıcı türü kullandıysanız bu sınıf farklı olacaktır, model.h dosyasını kontrol edin Eloquent::ML::Port::RandomForest classifier; void classify() { float x_sample[] = { /* fill this vector with sample values */ }; Serial.print("Predicted class: "); Serial.println(classifier.predictLabel(x_sample)); }
Her şey sorunsuz gittiyse, mikroişlemciniz makine öğrenimini sorunsuz bir şekilde çalıştırıyor olacak.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.