Hi rekan dev,
sudah lama tidak bertemu kali ini kita mencoba membahas materi baru yaitu SciSharp Stack yaitu kumpulan library dan framework untuk mengembang solusi deep learning dan machine learning berbasis .NET. Kebanyakan library ini hasil porting dari versi Python. Rekan-rekan bisa melihat detailnya pada link berikut: SciSharp STACK
Untuk perkenalan, kita akan mencoba Keras.NET untuk melakukan prediksi penggunaan BBM, kita akan menggunakan dataset dari UCI: UCI Machine Learning Repository: Auto MPG Data Set
Nah dataset ini tentang penggunaan bahan bakar dengan jenis mobil berbeda, terdapat beberapa karakteristik yang berbeda diantara lain:
1. mpg: continuous
2. cylinders: multi-valued discrete
3. displacement: continuous
4. horsepower: continuous
5. weight: continuous
6. acceleration: continuous
7. model year: multi-valued discrete
8. origin: multi-valued discrete
9. car name: string (unique for each instance)
Nah, kita data yang ingin diprediksi adalah MPG (miles per galon).
Start Coding
Ok, ikuti langkah berikut:
- Install VSCode atau visual studio dari Download Visual Studio Code – Mac, Linux, Windows
- Lalu install .NET 6 kalau belum terinstall, dapatkan dari Download .NET (Linux, macOS, and Windows) (microsoft.com)
- Kemudian buatlah aplikasi console dengan cara ketik dotnet new console di command prompt, atau dari visual studio : new project > console.
- Klik kanan pada project lalu install nuget package : Keras.NET bisa ketik juga dengan dotnet add package Keras.NET
- Lalu ketikan kode berikut:
-
using Keras;
using Keras.Layers;
using Keras.Models;
using Numpy;
using KerasNet.Regression;
using Keras.Optimizers;
//tarik data csv
var datasetPath = @"D:\experiment\SciSharpSeries\Dataset\auto-mpg.csv";
var data = KerasNet.Regression.DatasetHelper.LoadAsDataTable(datasetPath);
//hapus kolom
data.Drop(new[] { "car name" });
//one hot encoding
data.OneHotEncoding("origin");
//split training n test data
var (dt_train, dt_test) = data.Split();
//lihat data contoh
data.Head();
//buang kolom y
NDarray y_train = dt_train.Pop("mpg");
//normalisasi dengan z-score
data.Normalization();
//features
NDarray x_train = dt_train.ToNDArray();
//Build sequential model
var model = new Sequential();
model.Add(new Dense(64, activation: "relu", input_shape: new Shape(dt_train.Columns.Count)));
model.Add(new Dense(64, activation: "relu"));
model.Add(new Dense(1));
//Compile and train
model.Compile(optimizer: new Adam(0.001f), loss: "mean_absolute_error");
model.Fit(x_train, y_train, batch_size: 1, epochs: 100, verbose: 1,validation_split:0.2f);
//test
NDarray y_test = dt_test.Pop("mpg");
dt_test.Normalization();
NDarray x_test = dt_test.ToNDArray();
//var score = model.Evaluate(x_test, y_test);
//Console.WriteLine("Test loss:", score[0]);
//Console.WriteLine("Test accuracy:", score[1]);
//test
var res = model.Predict(x_test);
Console.WriteLine("hasil:"+res.ToString());
//Save model and weights
string json = model.ToJson();
File.WriteAllText("model.json", json);
model.SaveWeight("model.h5");
//Load model and weight
var loaded_model = Sequential.ModelFromJson(File.ReadAllText("model.json"));
loaded_model.LoadWeight("model.h5"); - Jangan lupa datasetnya di download dari situs uci, atau bisa ambil dari github project ini di SciSharpSeries/src/Dataset at main · mifmasterz/SciSharpSeries (github.com)
Penjelasan
Keras adalah API high level untuk membuat model neural network, Keras bisa berjalan diatas TensorFlow, CNTK, or Theano. Sedangkan Keras.NET adalah versi porting dari Keras yang ada di python. Keras ini biasa untuk melakukan experimen yang cepat karena user friendly, modular, dan bisa di extend. Support arsitektur neural network Sequensial, CNN, RNN, dsb.
Dapat menggunakan CPU atau GPU untuk melakukan training atau inferensi.
Silakan coba project lengkapnya dari link berikut: SciSharpSeries/src/KerasNet.Regression at main · mifmasterz/SciSharpSeries (github.com)
-Salam Developer