SciSharp Series: Regression with Keras

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:

  1. Install VSCode atau visual studio dari Download Visual Studio Code – Mac, Linux, Windows
  2. Lalu install .NET 6 kalau belum terinstall, dapatkan dari Download .NET (Linux, macOS, and Windows) (microsoft.com)
  3. Kemudian buatlah aplikasi console dengan cara ketik dotnet new console di command prompt, atau dari visual studio : new project > console. 
  4. Klik kanan pada project lalu install nuget package : Keras.NET bisa ketik juga dengan dotnet add package Keras.NET
  5. Lalu ketikan kode berikut:

  6. 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");
  7. 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

Loading

You May Also Like