Προς το περιεχόμενο

keras custom metric function


Προτεινόμενες αναρτήσεις

Δημοσ. (επεξεργασμένο)

θέλω να φτιάξω μια custom metric συνάρτηση για το training σε ενός NN (που να μπορώ να τη χρησιμοποιώ και ως custom loss)

θέλω αντι να χρησιμοποιώ πχ το 'mean_absolute_percentage_error' 

να χρησιμοποιώ το "max_absolute_percentage_error"

 

def max_pe(y_true, y_pred) :
 
    absolute_percentage_error = tf.abs((y_true - y_pred) / y_true) * 100
 
    return tf.reduce_max(absolute_percentage_error)

 

το θέμα είναι ότι δε βγάζει το σωστό νούμερο και δε μπορώ να καταλάβω γιατί

ακόμα και όταν απλά την καταγράφω σαν metric (δεν την έχω ως loss)

αφού τελος πάντως τελειώσει το training , όταν υπολογίσω το maximum percentage το όταν πάρω το trained μοντελο για πάρω τα predictions , το maximum error είναι ~ 39%

αλλά βλέποντας το history, στο epoch που "επιλέχθηκε" μετά το early stopping , λέει ότι το είναι 22% και δε βγάζει νόημα

τι κάνω λάθος
 

Επεξ/σία από DrLo
Δημοσ. (επεξεργασμένο)
12 ώρες πριν, DrLo είπε

θέλω να φτιάξω μια custom metric συνάρτηση για το training σε ενός NN (που να μπορώ να τη χρησιμοποιώ και ως custom loss)

θέλω αντι να χρησιμοποιώ πχ το 'mean_absolute_percentage_error' 

να χρησιμοποιώ το "max_absolute_percentage_error"

 

def max_pe(y_true, y_pred) :
 
    absolute_percentage_error = tf.abs((y_true - y_pred) / y_true) * 100
 
    return tf.reduce_max(absolute_percentage_error)

 

το θέμα είναι ότι δε βγάζει το σωστό νούμερο και δε μπορώ να καταλάβω γιατί

ακόμα και όταν απλά την καταγράφω σαν metric (δεν την έχω ως loss)

αφού τελος πάντως τελειώσει το training , όταν υπολογίσω το maximum percentage το όταν πάρω το trained μοντελο για πάρω τα predictions , το maximum error είναι ~ 39%

αλλά βλέποντας το history, στο epoch που "επιλέχθηκε" μετά το early stopping , λέει ότι το είναι 22% και δε βγάζει νόημα

τι κάνω λάθος
 

Τι ακριβώς εννοείς ότι δεν βγάζει το σωστό νούμερο; Δεν είναι καλό το performance; Είναι εκτός του εύρους της μετρικής; Το ότι η μετρική διαφέρει από αυτή του όταν έκανες training με όταν το ξανά φορτώσεις και κάνεις testing μπορεί να έχει πολλές αιτίες. Έχεις callback για να κρατάς το καλύτερο μοντέλο και με βάση κάποιο κανόνα ή το τελευταίο μετά το early stopping; Γενικά πολύ ασαφής η περιγραφή σου αν μπορείς ανέβασε ολόκληρο τον κώδικα ή γράψε πιο αναλυτικά το τι ακριβώς κάνεις που εκπαιδεύεις και που τεστάρεις και τι θέλεις να πετύχεις. Η σύνταξη της συνάρτησης που έχεις βάλει μέχρι στιγμής δεν νομίζω ότι έχει κάποιο λάθος.

Επεξ/σία από stefanos50
Δημοσ. (επεξεργασμένο)
12 λεπτά πριν, stefanos50 είπε

Τι ακριβώς εννοείς ότι δεν βγάζει το σωστό νούμερο; Δεν είναι καλό το performance; Είναι εκτός του εύρους της μετρικής; Το ότι η μετρική διαφέρει από αυτή του όταν έκανες training με όταν το ξανά φορτώσεις και κάνεις testing μπορεί να έχει πολλές αιτίες. Γενικά αν μπορείς ανέβασε ολόκληρο τον κώδικα ή γράψε πιο αναλυτικά το τι ακριβώς κάνεις που εκπαιδεύεις και που τεστάρεις.

Δεν εννωω ότι έχει διαφορετική τιμή (λίγο) σε διαφορετικά τρεξίματα όπως λες. Αυτό είναι φυσικά αναμενόμενο.

ενωω αυτό που βλέπω στο training history με το απο τέλεσμα του trained μοντέλου από ΤΟ ΙΔΙΟ αυτό training.  

Εννωω, ότι όταν πάρω το trained μοντέλο στο τέλος, έξω από το loop του training, δώσω ξανά , ανεξάρτητα από το training validation x και πάρω τα predictions και υπολογισω το maxmum percentage error (με άλλο κώδικά , επιβεβαίωμένο, ακόμα και αν παρω τις τιμές και το κάνω σε excel) των προβλέψεων είναι 42% πχ ένω το metric που βλέπω στο history είναι πολύ διαφορετικό. Στο epoch που επιλέγεται εντέλει ως αυτό στο οποίο γίνοτναι restore τα weights όταν ενεργοποιηθεί το early stoping βλέπω ότι το "val_max_pe" είναι ~28%.

οσάν δηλαδή ο υπολογισμός σε αυτό το function και μόνο να είναι λάθος


το δοκίμασα συμβουλές από το chatgpt για αυτό που προτείνει ως

με

 

from keras import backend as K


def max_pe(y_true, y_pred):
    
    percentage_errors = K.abs((y_true - y_pred) / y_true) * 100
    
    return K.max(percentage_errors)

 

μου δίνει είτε το ίδιο με αυτό που βγάζω εγώ , είτε περιέργως, παίζοντας με τα axis στο K.max() Ακριβως το ίδιο νούμερο με το ΜΕΑΝ percenage error (το υπάρχον mape δηλαδή).

 

 

Επεξ/σία από DrLo

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...