-
Notifications
You must be signed in to change notification settings - Fork 19
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Βήμα 10: Error στο GeneralMixtureModel.from_samples() #57
Comments
Θυμάμαι αυτό το error εβγαινε σαν warning, αλλα δε σταματουσε η εκτέλεση και έπαιρνες κανονικά αποτελέσματα. |
Δυστυχως μας σταματαει τελειώς την εκτέλεση δεν έχουμε τίποτα. Τις περισσότερες φορές με segmentation fault... |
Και σε εμάς (#60) παρουσιάζει την ίδια συμπεριφορά. Δηλαδή εμφανίζεται ως σφάλμα και όχι ως warning, οπότε δεν μπορούμε να παράξουμε κάποιο output και να συνεχίσουμε με τα επόμενα βήματα. |
Έτρεξα τη δική μας λύση για να επιβεβαιώσω (ακολουθώντας ακριβώς τις οδηγίες για στήσιμο περιβάλλοντος στο σχετικό issue) και βλέπω ότι σε κάποια ψηφία μπορεί να σκάει το GMM - HMM με n_mixture>1. Αυτό που προτείνω να κάνετε είναι ενα απλό grid search για 2-3 τιμές του n_mixture σε κάθε ψηφίο:
Γενικά τα GMM / HMM μοντέλα από τη φύση τους είναι κάπως ευαίσθητα στο initialization, και είναι εύκολο να απειριστούν τιμές, ή να πέσεις σε περιπτώσεις όπου δεν μπορείς να αντιστρέψεις τον πινακα covariance. (και αυτό δεν είναι θέμα βιβλιοθήκης, είναι στη φύση του μοντέλου), οπότε η επιλογή των παραμέτρων τους πολλές φορές είναι αναγκαία. Στον παραπάνω κώδικα θα δείτε ότι άλλα ψηφία μπορούν να μοντελοποιηθούν με 2-3 mixtures, ενώ άλλα μόνο με 1. (ανάλογα και τον αριθμό των features που χρησιμοποιείτε). Πιο ευσταθές είναι, όπως έχετε δει και στο μάθημα, όταν αναγκάζουμε τον πίνακα συνδιακύμανσης να είναι διαγώνιος (δηλαδή όταν υποθέτουμε ότι οι γκαουσιανες στα mixtures είναι ανεξάρτητες). Έτσι γίνεται πολύ πιο εύκολη η εκπαίδευση και δεν πέφτουμε τόσο συχνά σε τέτοια θέματα. Αυτό είναι και το default στα μεγάλα frameworks αναγνώρισης φωνής, όπως το kaldi. Αν θέλετε να το ψάξετε λίγο παραπάνω, στο framework που χρησιμοποιείτε αυτό γίνεται ως εξής
|
Στη δική μας περίπτωση ακόμη και με n_mixtures=1 παρατηρείται το ίδιο σφάλμα όσες φορές και να τρέξουμε τον κώδικα σε οποιονδήποτε από τους δύο υπολογιστές της ομάδας. Επίσης το δικό μας σφάλμα είναι το σφάλμα που έχουν αναφέρει τα παιδιά στο #43 το οποίο αφορά μετατροπή complex128 σε float64. Επίσης η συμπεριφορά που περιγράφεται παραπάνω παρατηρείται είτε τρέξουμε τον κώδικα σε jupyter είτε με python script. Ωστόσο σε άλλο υπολογιστή ο κώδικας τρέχει κανονικά. Δηλαδή το error αυτό εμφανίζεται ως warning. |
Σε αυτη την περιπτωση δεν εχετε στησει σωστα τα πακέτα 99%. Φτιάξτε ένα νεο conda environment και ακολουθήστε επακριβώς τις οδηγίες εδώ: #44 (comment) Αν δεν δουλεύει ούτε αυτό τότε δε γνωρίζω τι μπορεί να φταίει με αυτά τα δεδομένα. |
Δυστυχώς έχουμε φτιαξει 3-4 διαφορετικα περιβάλλοντα με τεράστια προσοχή στις οδηγίες που δίνετε παραπάνω και δεν τρέχει σε κανένα. Στην περίπτωση αυτή εμείς πως μπορούμε να συνεχίσουμε? |
Σε linux? Επίσης δεν υπάρχει η δυνατότητα να το τρέξετε στο μηχάνημα που δεν σας σκάει? |
Ναι σε linux δουλεύουμε. Δυστυχώς όχι δεν έχουμε αυτή τη δυνατότητα. :( |
To hyperparameter tuning δεν πρέπει να γίνει στο ensemble των hmms που χρησιμοποιούμε ως κατηγοριοποιητή; Πως γίνεται να το εφαρμόσουμε σε κάθε hmm ξεχωριστά και γιατί στον παραπάνω κώδικα κρατάμε αυτό με το μικρότερο log likelihood αφου τελικά επιλέγουμε το μοντέλο με το μεγαλύτερο log likelihood? |
Για κάθε digit χωριστα. Απλα κάνετε tuning μέσα στη λουπα που τρέχει πάνω στα digits.
negative log likelihood. mea culpa |
Το μεγαλύτερο average loglikelihood; Γιατί για κάθε sample στο validation θα πάρουμε και ένα διαφορετικό loglikelihood. Θα είχε νόημα και το μεγαλύτερο min loglikelihood ίσως; |
ναι το μέσο Log likelihood όλων των δειγμάτων εννοούμε. Αν για κάποιο δείγμα παίρνει inf / nan τιμές αγνοήστε το κατά το averaging. |
Δεν μας εχει δώσει ποτέ inf μεχρι στιγμής. Ευχαριστώ. |
Καλησπέρα σας.
Εδώ και μερικές μέρες έχουμε κολλήσει σε ένα πρόβλημα που αφορά τις βιβλιοθήκες.
Αρχικά τρέχαμε τον κώδικα με βάση τα default versions που είχαμε εγκαταστήσει, δοκιμάζοντας διάφορους συνδυασμούς παραμέτρων, ωστόσο οι επιδόσεις ήταν συνεχώς γύρω από το 50%. Παράλληλα έβγαζε και αυτά τα errors που αναφέρθηκαν στο issue #43 και προτείνατε να τα αγνοήσουμε καθώς αν τα υπόλοιπα είχαν γίνει σωστά θα έπρεπε να βγάζει σωστές τιμές.
Τελικά, εγκαταστήσαμε τα προτεινόμενα πακέτα σε νέο environment με βάση την δική σας αναφορά #44 .
Αρχικά, μας πέταγε πρόβλημα όταν δίναμε στο gmm.from_samples() το όρισμα Χ ως λιστα από λίστες (n_samples στοιχεία όπου κάθε στοιχείο έχει m_features) και ζήταγε np.array. Το error ήταν AttributeError: 'list' object has no attribute 'shape'. Σημειώνεται ότι στην αρχική default εγκατάσταση δεν μας πέταγε τέτοιο πρόβλημα, δεχόταν κανονικά το Χ.
Αφού μετατρέψαμε τη λίστα σε np.array (n_samples, m_features) έδινε Segmentation fault: 11.
Μετά μετατρέψαμε τον πίνακα σε 'float64' με βάση ένα σχόλιο στο #44. Εκεί γινόταν το εξής παράξενο. Σε διαφορετικές εκτελέσεις του προγράμματος έδινε διαφορετικά σφάλματα. Τη μία φορά έδινε segmentation fault, την άλλη έτρεχε την πρώτη επανάληψη του loop των n_states ενώ στην δεύτερη έδινε Segmentation fault: 11. Τρέχοντας το ξανά μας πέταγε το πρόβλημα με τον kmeans που είχε αναφέρει ένας συνάδελφος στο #44. Γενικότερα σε κάθε εκτέλεση έδινε άλλα σφάλματα.
Τελικά δοκιμάσαμε να χρησιμοποιήσουμε την MultivariateGaussianDistribution.from_samples(X) αντί για το gmm και μας έδινε επίδοση στο 92%...
Τι πρέπει να κάνουμε τωρα; Γιατί η περισσότερη ώρα της ενασχόλησης μας με την εργασία έχει αναλωθεί για την αντιμετώπιση αυτών των errors...
The text was updated successfully, but these errors were encountered: