Cara membuat custom metric di keras

By | October 23, 2021
1,112 Views

custom metric di keras – terkadang kita butuh sebuah evaluasi atas kinerja deep machine learning sesuai dengan apa kita inginkan. Selama ini kita mengenal ada banyak metrics pengukuran yaitu apa saja??

  1. Accuracy
  2. Categorical Accuracy
  3. Binary Accuracy
  4. Top K Categorical Accuracy
  5. Sparse Top K Categorical Accuracy

Kalian baca sendiri saja dokumentasi tersebut disini, Nah bagaimana membuat  custom metric di keras sesuai dengan keinginan kita. Kita akan membuat contoh simple saja yaitu logika XOR yang terdiri dari 3 layer dengan jumlah node sebagai berikut

  1. Layer input terdiri dari 2 node
  2. layer hidden terdiri dari 10 node
  3. layer ouput terdiri dari 1 node

Oiya, saya menggunakan tensorflow==2.5.0-rc2 dan keras==2.5.0, kita import kebutuhan librarynya dulu.

import numpy as np
import tensorflow as tf
from tensorflow import keras

Kita buat sebuah function accuracy dengan metode perhitungan jarak eucleid sebagai berikut

def hitungerror(y_true,y_pred):
    def f(y_true,y_pred):
        return np.sqrt(np.power(y_true-y_pred,2))
    return tf.numpy_function(f,[y_true,y_pred],tf.float32)

Selanjutnya kita buat model sesuai dengan arsitektur diatas yaitu terdiri dari 3 layer

def get_model():
    inputs  = keras.Input(shape=(2,)) #karena jumlah nya 2 node
    hidden = keras.layers.Dense(units=10,activation='relu') (inputs)
    outputs = keras.layers.Dense(units=1,activation='sigmoid') (hidden) #umlah node 1
    model = keras.Model(inputs,outputs)
    model.compile(optimizer="adam", loss="mean_squared_error",metrics=[hitungerror])
    return model

Perhatikan kode metrics=[hitungerror] telah menggunakan function yang kita buat sendiri! selanjutnya kita buat input dan target berikut

test_input = np.array([[0, 0],
                   [0, 1],
                   [1, 0],
                   [1, 1]])
test_target = np.array([0, 1, 1, 0])

Yuk kita panggil modelnya

model = get_model()
model.fit(test_input, test_target,epochs=5000,verbose=25)
prediksi = model.predict(test_input)
print(prediksi)

hasilnya sudah sip mendekati target!

[[0.05020934]
 [0.9864442 ]
 [0.98582816]
 [0.01226526]]

 

ref:

https://towardsdatascience.com/three-ways-to-use-custom-validation-metrics-in-tf-keras-tf2-bb9c40a3076

https://stackoverflow.com/questions/37657260/how-to-implement-custom-metric-in-keras

https://cnvrg.io/keras-custom-loss-functions/

See also  Klasifikasi menggunakan SVM