Γραμμική παλινδρόμηση με TensorFlow (Παραδείγματα)

Πίνακας περιεχομένων:

Anonim

Τι είναι η γραμμική παλινδρόμηση;

Η γραμμική παλινδρόμηση είναι μια προσέγγιση στα στατιστικά στοιχεία για τη μοντελοποίηση σχέσεων μεταξύ δύο μεταβλητών. Αυτή η μοντελοποίηση γίνεται μεταξύ μιας κλιμακωτής απόκρισης και μιας ή περισσότερων επεξηγηματικών μεταβλητών. Η σχέση με μια επεξηγηματική μεταβλητή ονομάζεται απλή γραμμική παλινδρόμηση και για περισσότερες από μία επεξηγηματικές μεταβλητές, ονομάζεται πολλαπλή γραμμική παλινδρόμηση.

Το TensorFlow παρέχει εργαλεία για πλήρη έλεγχο των υπολογισμών. Αυτό γίνεται με το API χαμηλού επιπέδου. Επιπλέον, το TensorFlow είναι εξοπλισμένο με μια μεγάλη γκάμα API για την εκτέλεση πολλών αλγορίθμων μηχανικής μάθησης. Αυτό είναι το API υψηλού επιπέδου. Το TensorFlow τους καλεί εκτιμητές

  • API χαμηλού επιπέδου: Δημιουργήστε την αρχιτεκτονική, βελτιστοποιώντας το μοντέλο από το μηδέν. Είναι περίπλοκο για αρχάριους
  • API υψηλού επιπέδου: Ορίστε τον αλγόριθμο. Είναι φιλικό προς το Πάσχα. Το TensorFlow παρέχει έναν εκτιμητή κλήσεων εργαλειοθήκης για την κατασκευή, την εκπαίδευση, την αξιολόγηση και την πρόβλεψη.

Σε αυτό το σεμινάριο, θα χρησιμοποιήσετε μόνο τους εκτιμητές . Οι υπολογισμοί είναι πιο γρήγοροι και πιο εύκολο να εφαρμοστούν. Το πρώτο μέρος του σεμιναρίου εξηγεί πώς να χρησιμοποιήσετε το πρόγραμμα βελτιστοποίησης καθόδου κλίσης για να εκπαιδεύσετε μια γραμμική παλινδρόμηση στο TensorFlow. Σε ένα δεύτερο μέρος, θα χρησιμοποιήσετε το σύνολο δεδομένων της Βοστώνης για να προβλέψετε την τιμή ενός σπιτιού χρησιμοποιώντας τον εκτιμητή TensorFlow.

Κατεβάστε το Boston DataSet

Σε αυτό το σεμινάριο TensorFlow Regression, θα μάθετε:

  • Τι είναι η γραμμική παλινδρόμηση;
  • Πώς να εκπαιδεύσετε ένα μοντέλο γραμμικής παλινδρόμησης
  • Πώς να εκπαιδεύσετε μια γραμμική παλινδρόμηση με το TensorFlow
  • Πάντες
  • Λύση Numpy
  • Tensorflow διάλυμα

Πώς να εκπαιδεύσετε ένα μοντέλο γραμμικής παλινδρόμησης

Πριν αρχίσουμε να εκπαιδεύουμε το μοντέλο, ας δούμε τι είναι μια γραμμική παλινδρόμηση.

Φανταστείτε ότι έχετε δύο μεταβλητές, x και y και η αποστολή σας είναι να προβλέψετε την αξία της γνώσης της τιμής. Εάν σχεδιάσετε τα δεδομένα, μπορείτε να δείτε μια θετική σχέση μεταξύ της ανεξάρτητης μεταβλητής σας, x και της εξαρτημένης μεταβλητής σας y.

Μπορεί να παρατηρήσετε, εάν x = 1, y θα είναι περίπου ίσο με 6 και εάν x = 2, y θα είναι περίπου 8,5.

Αυτή δεν είναι μια πολύ ακριβής μέθοδος και επιρρεπής σε σφάλματα, ειδικά με ένα σύνολο δεδομένων με εκατοντάδες χιλιάδες σημεία.

Μια γραμμική παλινδρόμηση αξιολογείται με μια εξίσωση. Η μεταβλητή y εξηγείται από έναν ή πολλούς συνδυασμούς. Στο παράδειγμά σας, υπάρχει μόνο μία εξαρτημένη μεταβλητή. Εάν πρέπει να γράψετε αυτήν την εξίσωση, θα είναι:

Με:

  • είναι το βάρος που σχετίζεται με το x
  • είναι το υπόλοιπο ή το σφάλμα του μοντέλου. Περιλαμβάνει ό, τι το μοντέλο δεν μπορεί να μάθει από τα δεδομένα

Φανταστείτε ότι ταιριάζει στο μοντέλο και βρίσκετε την ακόλουθη λύση για:

  • = 3.8
  • = 2.78

Μπορείτε να αντικαταστήσετε αυτούς τους αριθμούς στην εξίσωση και γίνεται:

y = 3,8 + 2,78x

Έχετε τώρα έναν καλύτερο τρόπο να βρείτε τις τιμές για το y. Δηλαδή, μπορείτε να αντικαταστήσετε το x με οποιαδήποτε τιμή θέλετε να προβλέψετε το y. Στην παρακάτω εικόνα, έχουμε αντικαταστήσει το x στην εξίσωση με όλες τις τιμές στο σύνολο δεδομένων και σχεδιάζουμε το αποτέλεσμα.

Η κόκκινη γραμμή αντιπροσωπεύει την προσαρμοσμένη τιμή, δηλαδή τις τιμές του y για κάθε τιμή x. Δεν χρειάζεται να δείτε την τιμή του x για να προβλέψετε το y, για κάθε x υπάρχει κάποιο που ανήκει στην κόκκινη γραμμή. Μπορείτε επίσης να προβλέψετε τιμές x υψηλότερες από 2!

Εάν θέλετε να επεκτείνετε τη γραμμική παλινδρόμηση σε περισσότερες συντεταγμένες, μπορείτε να προσθέσετε περισσότερες μεταβλητές στο μοντέλο. Η διαφορά μεταξύ της παραδοσιακής ανάλυσης και της γραμμικής παλινδρόμησης είναι η γραμμική παλινδρόμηση που δείχνει πώς θα αντιδράσει το y για κάθε μεταβλητή x που λαμβάνεται ανεξάρτητα.

Ας δούμε ένα παράδειγμα. Φανταστείτε ότι θέλετε να προβλέψετε τις πωλήσεις ενός καταστήματος παγωτού. Το σύνολο δεδομένων περιέχει διαφορετικές πληροφορίες όπως ο καιρός (π.χ. βροχερός, ηλιόλουστος, συννεφιασμένος), πληροφορίες πελατών (π.χ. μισθός, φύλο, οικογενειακή κατάσταση).

Η παραδοσιακή ανάλυση θα προσπαθήσει να προβλέψει την πώληση, ας πούμε υπολογίζοντας τον μέσο όρο για κάθε μεταβλητή και θα προσπαθήσουμε να εκτιμήσουμε την πώληση για διαφορετικά σενάρια. Θα οδηγήσει σε κακές προβλέψεις και θα περιορίσει την ανάλυση στο επιλεγμένο σενάριο.

Εάν χρησιμοποιείτε γραμμική παλινδρόμηση, μπορείτε να γράψετε αυτήν την εξίσωση:

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

Πώς λειτουργεί ο αλγόριθμος

Ο αλγόριθμος θα επιλέξει έναν τυχαίο αριθμό για καθένα αντικαταστήσει την τιμή του x για να πάρει την προβλεπόμενη τιμή του y. Εάν το σύνολο δεδομένων έχει 100 παρατηρήσεις, ο αλγόριθμος υπολογίζει 100 προβλεπόμενες τιμές.

Μπορούμε να υπολογίσουμε το σφάλμα, που σημειώθηκε στο μοντέλο, το οποίο είναι η διαφορά μεταξύ της προβλεπόμενης τιμής και της πραγματικής τιμής. Ένα θετικό σφάλμα σημαίνει ότι το μοντέλο υποτιμά την πρόβλεψη του y και ένα αρνητικό σφάλμα σημαίνει ότι το μοντέλο υπερεκτιμά την πρόβλεψη του y.

Ο στόχος σας είναι να ελαχιστοποιήσετε το τετράγωνο του σφάλματος. Ο αλγόριθμος υπολογίζει το μέσο όρο του τετραγωνικού σφάλματος. Αυτό το βήμα ονομάζεται ελαχιστοποίηση του σφάλματος. Για γραμμική παλινδρόμηση είναι το μέσο τετράγωνο σφάλμα , που ονομάζεται επίσης MSE. Μαθηματικά, είναι:

Που:

  • αναφέρεται στην προβλεπόμενη τιμή
  • y είναι οι πραγματικές τιμές
  • m είναι ο αριθμός των παρατηρήσεων

Σημειώστε ότι είναι η μαθηματική σημειογραφία της μέσης.

Ο στόχος είναι να βρούμε τα καλύτερα που ελαχιστοποιούν το MSE

Εάν το μέσο σφάλμα είναι μεγάλο, αυτό σημαίνει ότι το μοντέλο έχει χαμηλή απόδοση και τα βάρη δεν επιλέγονται σωστά. Για να διορθώσετε τα βάρη, πρέπει να χρησιμοποιήσετε ένα εργαλείο βελτιστοποίησης. Η παραδοσιακή βελτιστοποίηση ονομάζεται Gradient Descent .

Η κλίση της κλίσης παίρνει το παράγωγο και μειώνει ή αυξάνει το βάρος. Εάν το παράγωγο είναι θετικό, το βάρος μειώνεται. Εάν το παράγωγο είναι αρνητικό, το βάρος αυξάνεται. Το μοντέλο θα ενημερώσει τα βάρη και θα υπολογίσει ξανά το σφάλμα. Αυτή η διαδικασία επαναλαμβάνεται έως ότου το σφάλμα δεν αλλάξει πια. Κάθε διαδικασία ονομάζεται επανάληψη . Εκτός αυτού, οι κλίσεις πολλαπλασιάζονται με ένα ποσοστό εκμάθησης. Δείχνει την ταχύτητα της μάθησης.

Εάν το ποσοστό εκμάθησης είναι πολύ μικρό, θα χρειαστεί πολύς χρόνος για τη σύγκλιση του αλγορίθμου (δηλαδή απαιτεί πολλές επαναλήψεις). Εάν το ποσοστό εκμάθησης είναι πολύ υψηλό, ο αλγόριθμος ενδέχεται να μην συγκλίνει ποτέ.

Μπορείτε να δείτε από την παραπάνω εικόνα, το μοντέλο επαναλαμβάνει τη διαδικασία περίπου 20 φορές πριν για να βρει μια σταθερή τιμή για τα βάρη, φτάνοντας ως εκ τούτου το χαμηλότερο σφάλμα.

Σημειώστε ότι , το σφάλμα δεν είναι ίσο με το μηδέν, αλλά σταθεροποιείται γύρω στο 5. Αυτό σημαίνει, το μοντέλο κάνει ένα τυπικό σφάλμα 5. Εάν θέλετε να μειώσετε το σφάλμα, πρέπει να προσθέσετε περισσότερες πληροφορίες στο μοντέλο, όπως περισσότερες μεταβλητές ή χρήση διαφορετικοί εκτιμητές.

Θυμάσαι την πρώτη εξίσωση

Τα τελικά βάρη είναι 3,8 και 2,78. Το παρακάτω βίντεο σας δείχνει πώς η κλίση της κλίσης βελτιστοποιεί τη λειτουργία απώλειας για να βρείτε αυτά τα βάρη

Πώς να εκπαιδεύσετε μια γραμμική παλινδρόμηση με το TensorFlow

Τώρα που έχετε καλύτερη κατανόηση του τι συμβαίνει πίσω από την κουκούλα, είστε έτοιμοι να χρησιμοποιήσετε το API εκτιμητή που παρέχεται από την TensorFlow για να εκπαιδεύσετε την πρώτη σας γραμμική παλινδρόμηση χρησιμοποιώντας το TensorFlow.

Θα χρησιμοποιήσετε το σύνολο δεδομένων της Βοστώνης, το οποίο περιλαμβάνει τις ακόλουθες μεταβλητές

βρώμικο κατά κεφαλήν ποσοστό εγκληματικότητας ανά πόλη
zn αναλογία κατοικημένης γης που έχει χωροθετηθεί για παρτίδες άνω των 25.000 τ.μ.
Ινδός ποσοστό στρεμμάτων μη λιανικής επιχείρησης ανά πόλη.
Νοξ συγκέντρωση οξειδίων του αζώτου
rm μέσος αριθμός δωματίων ανά κατοικία
ηλικία αναλογία των ιδιοκατοικημένων μονάδων που κατασκευάστηκαν πριν από το 1940
δισ σταθμισμένες αποστάσεις σε πέντε κέντρα απασχόλησης της Βοστώνης
φόρος πλήρης τιμή φόρου ιδιοκτησίας-φόρου ανά 10.000 δολάρια
ptratio αναλογία μαθητή-δασκάλου ανά πόλη
μέσο Μέση αξία των ιδιοκατοικημένων σπιτιών σε χιλιάδες δολάρια

Θα δημιουργήσετε τρία διαφορετικά σύνολα δεδομένων:

σύνολο δεδομένων σκοπός σχήμα
Εκπαίδευση Εκπαιδεύστε το μοντέλο και αποκτήστε τα βάρη 400, 10
Εκτίμηση Αξιολογήστε την απόδοση του μοντέλου σε αόρατα δεδομένα 100, 10
Προλέγω Χρησιμοποιήστε το μοντέλο για να προβλέψετε την εσωτερική τιμή σε νέα δεδομένα 6, 10

Οι στόχοι είναι να χρησιμοποιήσετε τις δυνατότητες του συνόλου δεδομένων για να προβλέψετε την αξία του σπιτιού.

Κατά το δεύτερο μέρος του σεμιναρίου, θα μάθετε πώς να χρησιμοποιείτε το TensorFlow με τρεις διαφορετικούς τρόπους εισαγωγής των δεδομένων:

  • Με τους Pandas
  • Με τον Numpy
  • Μόνο TF

Σημειώστε ότι, όλες οι επιλογές παρέχουν τα ίδια αποτελέσματα.

Θα μάθετε πώς να χρησιμοποιείτε το API υψηλού επιπέδου για τη δημιουργία, την εκπαίδευση ενός μοντέλου γραμμικής παλινδρόμησης TensorFlow. Εάν χρησιμοποιούσατε το API χαμηλού επιπέδου, έπρεπε να ορίσετε με το χέρι τα εξής:

  • Λειτουργία απώλειας
  • Βελτιστοποίηση: Διαβάθμιση κλίσης
  • Πολλαπλασιασμός πινάκων
  • Γράφημα και τανυστής

Αυτό είναι κουραστικό και πιο περίπλοκο για αρχάριους.

Πάντες

Πρέπει να εισαγάγετε τις απαραίτητες βιβλιοθήκες για να εκπαιδεύσετε το μοντέλο.

import pandas as pdfrom sklearn import datasetsimport tensorflow as tfimport itertools 

Βήμα 1) Εισαγάγετε τα δεδομένα με panda.

Μπορείτε να ορίσετε τα ονόματα των στηλών και να τα αποθηκεύσετε σε COLUMNS. Μπορείτε να χρησιμοποιήσετε το pd.read_csv () για να εισαγάγετε τα δεδομένα.

COLUMNS = ["crim", "zn", "indus", "nox", "rm", "age","dis", "tax", "ptratio", "medv"]

training_set = pd.read_csv ("E: /boston_train.csv", skipinitialspace = True, skiprows = 1, ονόματα = ΣΤΗΛΕΣ)

test_set = pd.read_csv ("E: /boston_test.csv", skipinitialspace = True, skiprows = 1, names = COLUMNS)

prediction_set = pd.read_csv ("E: /boston_predict.csv", skipinitialspace = True, skiprows = 1, ονόματα = COLUMNS)

Μπορείτε να εκτυπώσετε το σχήμα των δεδομένων.

print(training_set.shape, test_set.shape, prediction_set.shape) 

Παραγωγή

(400, 10) (100, 10) (6, 10)

Σημειώστε ότι η ετικέτα, δηλαδή το y, περιλαμβάνεται στο σύνολο δεδομένων. Επομένως, πρέπει να ορίσετε δύο άλλες λίστες. Ένα που περιέχει μόνο τα χαρακτηριστικά και ένα με το όνομα της ετικέτας μόνο. Αυτές οι δύο λίστες θα ενημερώσουν τον εκτιμητή σας ποιες είναι οι δυνατότητες στο σύνολο δεδομένων και ποιο όνομα στήλης είναι η ετικέτα

Γίνεται με τον παρακάτω κώδικα.

FEATURES = ["crim", "zn", "indus", "nox", "rm","age", "dis", "tax", "ptratio"]LABEL = "medv" 

Βήμα 2) Μετατροπή των δεδομένων

Πρέπει να μετατρέψετε τις αριθμητικές μεταβλητές στη σωστή μορφή. Το Tensorflow παρέχει μια μέθοδο μετατροπής συνεχούς μεταβλητής: tf.feature_column.numeric_column ().

Στο προηγούμενο βήμα, ορίζετε μια λίστα μια δυνατότητα που θέλετε να συμπεριλάβετε στο μοντέλο. Τώρα μπορείτε να χρησιμοποιήσετε αυτήν τη λίστα για να τις μετατρέψετε σε αριθμητικά δεδομένα. Εάν θέλετε να εξαιρέσετε λειτουργίες στο μοντέλο σας, μη διστάσετε να αποθέσετε μία ή περισσότερες μεταβλητές στη λίστα ΧΑΡΑΚΤΗΡΙΣΤΙΚΑ προτού δημιουργήσετε το χαρακτηριστικό_cols

Σημειώστε ότι θα χρησιμοποιήσετε την κατανόηση της λίστας Python με τα ΛΕΙΤΟΥΡΓΙΑ λίστας για να δημιουργήσετε μια νέα λίστα με το χαρακτηριστικό feature_cols. Σας βοηθά να αποφύγετε να γράφετε εννέα φορές tf.feature_column.numeric_column (). Η κατανόηση λίστας είναι ένας γρηγορότερος και καθαρότερος τρόπος δημιουργίας νέων λιστών

feature_cols = [tf.feature_column.numeric_column(k) for k in FEATURES] 

Βήμα 3) Ορίστε τον εκτιμητή

Σε αυτό το βήμα, πρέπει να ορίσετε τον εκτιμητή. Το Tensorflow παρέχει επί του παρόντος 6 προεγκατεστημένους εκτιμητές, συμπεριλαμβανομένων 3 για εργασία ταξινόμησης και 3 για εργασία παλινδρόμησης TensorFlow:

  • Ρεγκρέσερ
    • DNNRegressor
    • Γραμμικός
    • DNNLineaCombinedRegressor
  • Ταξινομητής
    • DNNClassifier
    • LinearClassifier
    • DNNLineaCombinedClassifier

Σε αυτό το σεμινάριο, θα χρησιμοποιήσετε το Linear Regressor. Για να αποκτήσετε πρόσβαση σε αυτήν τη λειτουργία, πρέπει να χρησιμοποιήσετε το tf.estimator.

Η συνάρτηση χρειάζεται δύο ορίσματα:

  • feature_columns: Περιέχει τις μεταβλητές που θα συμπεριληφθούν στο μοντέλο
  • model_dir: διαδρομή για αποθήκευση του γραφήματος, αποθήκευση των παραμέτρων του μοντέλου κ.λπ.

Το Tensorflow θα δημιουργήσει αυτόματα ένα αρχείο με το όνομα train στον κατάλογο εργασίας σας. Πρέπει να χρησιμοποιήσετε αυτήν τη διαδρομή για να αποκτήσετε πρόσβαση στον πίνακα ελέγχου Tensorboard, όπως φαίνεται στο παρακάτω παράδειγμα παλινδρόμησης TensorFlow.

estimator = tf.estimator.LinearRegressor(feature_columns=feature_cols,model_dir="train") 

Παραγωγή

INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'train', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Το δύσκολο μέρος με το TensorFlow είναι ο τρόπος τροφοδοσίας του μοντέλου. Το Tensorflow έχει σχεδιαστεί για να λειτουργεί με παράλληλους υπολογιστές και πολύ μεγάλο σύνολο δεδομένων. Λόγω του περιορισμού των πόρων του μηχανήματος, είναι αδύνατο να τροφοδοτήσετε το μοντέλο με όλα τα δεδομένα ταυτόχρονα. Για αυτό, πρέπει να τροφοδοτείτε μια παρτίδα δεδομένων κάθε φορά. Σημειώστε ότι, μιλάμε για τεράστιο σύνολο δεδομένων με εκατομμύρια ή περισσότερες εγγραφές. Εάν δεν προσθέσετε παρτίδα, θα καταλήξετε σε σφάλμα μνήμης.

Για παράδειγμα, εάν τα δεδομένα σας περιέχουν 100 παρατηρήσεις και ορίσετε ένα μέγεθος δέσμης 10, αυτό σημαίνει ότι το μοντέλο θα δει 10 παρατηρήσεις για κάθε επανάληψη (10 * 10).

Όταν το μοντέλο έχει δει όλα τα δεδομένα, τελειώνει μια εποχή . Μια εποχή καθορίζει πόσες φορές θέλετε το μοντέλο να δει τα δεδομένα. Είναι καλύτερα να ρυθμίσετε αυτό το βήμα σε κανένα και να αφήσετε το μοντέλο να εκτελέσει επαναλαμβανόμενο αριθμό χρόνου.

Μια δεύτερη πληροφορία για προσθήκη είναι εάν θέλετε να ανακατέψετε τα δεδομένα πριν από κάθε επανάληψη. Κατά τη διάρκεια της εκπαίδευσης, είναι σημαντικό να ανακατέψετε τα δεδομένα έτσι ώστε το μοντέλο να μην μαθαίνει συγκεκριμένο μοτίβο του συνόλου δεδομένων. Εάν το μοντέλο μάθει τις λεπτομέρειες του υποκείμενου μοτίβου των δεδομένων, θα έχει δυσκολίες να γενικεύσει την πρόβλεψη για αόρατα δεδομένα. Αυτό ονομάζεται υπερβολική τοποθέτηση . Το μοντέλο αποδίδει καλά στα εκπαιδευτικά δεδομένα, αλλά δεν μπορεί να προβλέψει σωστά τα δεδομένα που δεν εμφανίζονται.

Το TensorFlow κάνει αυτά τα δύο βήματα εύκολο να γίνει. Όταν τα δεδομένα πηγαίνουν στον αγωγό, ξέρει πόσες παρατηρήσεις χρειάζεται (παρτίδα) και αν πρέπει να ανακατέψει τα δεδομένα.

Για να δώσετε οδηγίες στο Tensorflow πώς να τροφοδοτήσετε το μοντέλο, μπορείτε να χρησιμοποιήσετε το pandas_input_fn. Αυτό το αντικείμενο χρειάζεται 5 παραμέτρους:

  • x: δεδομένα χαρακτηριστικών
  • y: δεδομένα ετικέτας
  • batch_size: παρτίδα. Από προεπιλογή 128
  • num_epoch: Ο αριθμός των εποχών, από προεπιλογή 1
  • shuffle: Ανακάτεμα ή όχι των δεδομένων. Από προεπιλογή, Κανένα

Πρέπει να τροφοδοτήσετε το μοντέλο πολλές φορές, ώστε να ορίσετε μια συνάρτηση για να επαναλάβετε αυτήν τη διαδικασία. όλη αυτή η συνάρτηση get_input_fn.

def get_input_fn(data_set, num_epochs=None, n_batch = 128, shuffle=True):return tf.estimator.inputs.pandas_input_fn(x=pd.DataFrame({k: data_set[k].values for k in FEATURES}),y = pd.Series(data_set[LABEL].values),batch_size=n_batch,num_epochs=num_epochs,shuffle=shuffle) 

Η συνήθης μέθοδος για την αξιολόγηση της απόδοσης ενός μοντέλου είναι:

  • Εκπαιδεύστε το μοντέλο
  • Αξιολογήστε το μοντέλο σε ένα διαφορετικό σύνολο δεδομένων
  • Κάντε προβλέψεις

Ο εκτιμητής Tensorflow παρέχει τρεις διαφορετικές λειτουργίες για την εύκολη εκτέλεση αυτών των τριών βημάτων.

Βήμα 4) : Εκπαιδεύστε το μοντέλο

Μπορείτε να χρησιμοποιήσετε το τρένο εκτιμητή για να αξιολογήσετε το μοντέλο. Ο εκτιμητής αμαξοστοιχίας χρειάζεται input_fn και διάφορα βήματα. Μπορείτε να χρησιμοποιήσετε τη λειτουργία που δημιουργήσατε παραπάνω για να τροφοδοτήσετε το μοντέλο. Στη συνέχεια, δίνετε εντολή στο μοντέλο να επαναλάβει 1000 φορές. Σημειώστε ότι, δεν καθορίζετε τον αριθμό των εποχών, αφήνετε το μοντέλο να επαναλαμβάνεται 1000 φορές. Εάν ορίσετε τον αριθμό της εποχής σε 1, τότε το μοντέλο θα επαναληφθεί 4 φορές: Υπάρχουν 400 εγγραφές στο σετ προπόνησης και το μέγεθος της παρτίδας είναι 128

  1. 128 σειρές
  2. 128 σειρές
  3. 128 σειρές
  4. 16 σειρές

Επομένως, είναι ευκολότερο να ρυθμίσετε τον αριθμό της εποχής σε κανέναν και να ορίσετε τον αριθμό της επανάληψης, όπως φαίνεται στο παρακάτω παράδειγμα ταξινόμησης TensorFlow.

estimator.train(input_fn=get_input_fn(training_set,num_epochs=None,n_batch = 128,shuffle=False),steps=1000) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into train/model.ckpt.INFO:tensorflow:loss = 83729.64, step = 1INFO:tensorflow:global_step/sec: 238.616INFO:tensorflow:loss = 13909.657, step = 101 (0.420 sec)INFO:tensorflow:global_step/sec: 314.293INFO:tensorflow:loss = 12881.449, step = 201 (0.320 sec)INFO:tensorflow:global_step/sec: 303.863INFO:tensorflow:loss = 12391.541, step = 301 (0.327 sec)INFO:tensorflow:global_step/sec: 308.782INFO:tensorflow:loss = 12050.5625, step = 401 (0.326 sec)INFO:tensorflow:global_step/sec: 244.969INFO:tensorflow:loss = 11766.134, step = 501 (0.407 sec)INFO:tensorflow:global_step/sec: 155.966INFO:tensorflow:loss = 11509.922, step = 601 (0.641 sec)INFO:tensorflow:global_step/sec: 263.256INFO:tensorflow:loss = 11272.889, step = 701 (0.379 sec)INFO:tensorflow:global_step/sec: 254.112INFO:tensorflow:loss = 11051.9795, step = 801 (0.396 sec)INFO:tensorflow:global_step/sec: 292.405INFO:tensorflow:loss = 10845.855, step = 901 (0.341 sec)INFO:tensorflow:Saving checkpoints for 1000 into train/model.ckpt.INFO:tensorflow:Loss for final step: 5925.9873.

Μπορείτε να ελέγξετε το Tensorboard με την ακόλουθη εντολή:

activate hello-tf# For MacOStensorboard --logdir=./train# For Windowstensorboard --logdir=train 

Βήμα 5) Αξιολογήστε το μοντέλο σας

Μπορείτε να αξιολογήσετε την εφαρμογή του μοντέλου σας στο σετ δοκιμών με τον παρακάτω κώδικα:

ev = estimator.evaluate(input_fn=get_input_fn(test_set,num_epochs=1,n_batch = 128,shuffle=False)) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-05-13-01:43:13INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Finished evaluation at 2018-05-13-01:43:13INFO:tensorflow:Saving dict for global step 1000: average_loss = 32.15896, global_step = 1000, loss = 3215.896

Μπορείτε να εκτυπώσετε την απώλεια με τον παρακάτω κώδικα:

loss_score = ev["loss"]print("Loss: {0:f}".format(loss_score)) 

Παραγωγή

Loss: 3215.895996

Το μοντέλο έχει απώλεια 3215. Μπορείτε να ελέγξετε τη συνοπτική στατιστική για να πάρετε μια ιδέα για το πόσο μεγάλο είναι το σφάλμα.

training_set['medv'].describe()

Παραγωγή

count 400.000000mean 22.625500std 9.572593min 5.00000025% 16.60000050% 21.40000075% 25.025000max 50.000000Name: medv, dtype: float64 

Από τη συνοπτική στατιστική παραπάνω, γνωρίζετε ότι η μέση τιμή για ένα σπίτι είναι 22 χιλιάδες, με ελάχιστη τιμή 9 χιλιάδες και μέγιστο 50 χιλιάδες. Το μοντέλο κάνει ένα τυπικό σφάλμα 3k δολαρίων.

Βήμα 6) Κάντε την πρόβλεψη

Τέλος, μπορείτε να χρησιμοποιήσετε τον εκτιμητή TensorFlow προβλέψτε για να εκτιμήσετε την αξία των 6 σπιτιών της Βοστώνης.

y = estimator.predict(input_fn=get_input_fn(prediction_set,num_epochs=1,n_batch = 128,shuffle=False)) 

Για να εκτυπώσετε τις εκτιμώμενες τιμές, μπορείτε να χρησιμοποιήσετε αυτόν τον κωδικό:

predictions = list(p["predictions"] for p in itertools.islice(y, 6))print("Predictions: {}".format(str(predictions))) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.Predictions: [array([32.297546], dtype=float32), array([18.96125], dtype=float32), array([27.270979], dtype=float32), array([29.299236], dtype=float32), array([16.436684], dtype=float32), array([21.460876], dtype=float32)]

Το μοντέλο προβλέπει τις ακόλουθες τιμές:

σπίτι

Προφητεία

1

32.29

2

18.96

3

27.27

4

29.29

5

16.43

7

21.46

Σημειώστε ότι δεν γνωρίζουμε την πραγματική αξία του. Στο σεμινάριο της βαθιάς μάθησης, θα προσπαθήσετε να νικήσετε το γραμμικό μοντέλο

Λύση Numpy

Αυτή η ενότητα εξηγεί πώς να εκπαιδεύσετε το μοντέλο χρησιμοποιώντας έναν εκτιμώμενο εκτιμητή για την τροφοδοσία των δεδομένων. Η μέθοδος είναι η ίδια που θα χρησιμοποιήσετε τον εκτιμητή numpy_input_fn.

training_set_n = pd.read_csv (τιμές "E: /boston_train.csv").

test_set_n = pd.read_csv (τιμές "E: /boston_test.csv").

prediction_set_n = pd.read_csv ("E: /boston_predict.csv") τιμές.

Βήμα 1) Εισαγάγετε τα δεδομένα

Πρώτα απ 'όλα, πρέπει να διαφοροποιήσετε τις μεταβλητές χαρακτηριστικών από την ετικέτα. Πρέπει να το κάνετε αυτό για τα δεδομένα και την αξιολόγηση της εκπαίδευσης. Είναι πιο γρήγορο να ορίσετε μια συνάρτηση για να χωρίσετε τα δεδομένα.

def prepare_data(df):X_train = df[:, :-3]y_train = df[:,-3]return X_train, y_train 

Μπορείτε να χρησιμοποιήσετε τη συνάρτηση για να διαχωρίσετε την ετικέτα από τις δυνατότητες του συνόλου δεδομένων τρένου / αξιολόγησης

X_train, y_train = prepare_data(training_set_n)X_test, y_test = prepare_data(test_set_n) 

Πρέπει να εξαιρέσετε την τελευταία στήλη του συνόλου δεδομένων πρόβλεψης, επειδή περιέχει μόνο NaN

x_predict = prediction_set_n[:, :-2] 

Επιβεβαιώστε το σχήμα του πίνακα. Σημειώστε ότι, η ετικέτα δεν πρέπει να έχει διάσταση, σημαίνει (400,).

print(X_train.shape, y_train.shape, x_predict.shape) 

Παραγωγή

(400, 9) (400,) (6, 9) 

Μπορείτε να δημιουργήσετε τις στήλες χαρακτηριστικών ως εξής:

feature_columns = [ tf.feature_column.numeric_column('x', shape=X_train.shape[1:])] 

Ο εκτιμητής ορίζεται όπως πριν, καθοδηγείτε τις στήλες χαρακτηριστικών και πού να αποθηκεύσετε το γράφημα.

estimator = tf.estimator.LinearRegressor(feature_columns=feature_columns,model_dir="train1") 

Παραγωγή

INFO:tensorflow:Using default config.INFO:tensorflow:Using config: {'_model_dir': 'train1', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1} 

Μπορείτε να χρησιμοποιήσετε το numpy estimapor για να τροφοδοτήσετε τα δεδομένα στο μοντέλο και στη συνέχεια να εκπαιδεύσετε το μοντέλο. Σημειώστε ότι, ορίζουμε τη συνάρτηση input_fn για να διευκολύνουμε την αναγνωσιμότητα

# Train the estimatortrain_input = tf.estimator.inputs.numpy_input_fn(x={"x": X_train},y=y_train,batch_size=128,shuffle=False,num_epochs=None)estimator.train(input_fn = train_input,steps=5000) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into train1/model.ckpt.INFO:tensorflow:loss = 83729.64, step = 1INFO:tensorflow:global_step/sec: 490.057INFO:tensorflow:loss = 13909.656, step = 101 (0.206 sec)INFO:tensorflow:global_step/sec: 788.986INFO:tensorflow:loss = 12881.45, step = 201 (0.126 sec)INFO:tensorflow:global_step/sec: 736.339INFO:tensorflow:loss = 12391.541, step = 301 (0.136 sec)INFO:tensorflow:global_step/sec: 383.305INFO:tensorflow:loss = 12050.561, step = 401 (0.260 sec)INFO:tensorflow:global_step/sec: 859.832INFO:tensorflow:loss = 11766.133, step = 501 (0.117 sec)INFO:tensorflow:global_step/sec: 804.394INFO:tensorflow:loss = 11509.918, step = 601 (0.125 sec)INFO:tensorflow:global_step/sec: 753.059INFO:tensorflow:loss = 11272.891, step = 701 (0.134 sec)INFO:tensorflow:global_step/sec: 402.165INFO:tensorflow:loss = 11051.979, step = 801 (0.248 sec)INFO:tensorflow:global_step/sec: 344.022INFO:tensorflow:loss = 10845.854, step = 901 (0.288 sec)INFO:tensorflow:Saving checkpoints for 1000 into train1/model.ckpt.INFO:tensorflow:Loss for final step: 5925.985.Out[23]:

Αναπαράγετε το ίδιο βήμα με διαφορετικό εκτιμητή για να αξιολογήσετε το μοντέλο σας

eval_input = tf.estimator.inputs.numpy_input_fn(x={"x": X_test},y=y_test,shuffle=False,batch_size=128,num_epochs=1)estimator.evaluate(eval_input,steps=None) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-05-13-01:44:00INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train1/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Finished evaluation at 2018-05-13-01:44:00INFO:tensorflow:Saving dict for global step 1000: average_loss = 32.158947, global_step = 1000, loss = 3215.8945Out[24]:{'average_loss': 32.158947, 'global_step': 1000, 'loss': 3215.8945}

Τέλος, μπορείτε να υπολογίσετε την πρόβλεψη. Θα πρέπει να είναι παρόμοιο με τα pandas.

test_input = tf.estimator.inputs.numpy_input_fn(x={"x": x_predict},batch_size=128,num_epochs=1,shuffle=False)y = estimator.predict(test_input)predictions = list(p["predictions"] for p in itertools.islice(y, 6))print("Predictions: {}".format(str(predictions))) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train1/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.Predictions: [array([32.297546], dtype=float32), array([18.961248], dtype=float32), array([27.270979], dtype=float32), array([29.299242], dtype=float32), array([16.43668], dtype=float32), array([21.460878], dtype=float32)]

Tensorflow διάλυμα

Η τελευταία ενότητα είναι αφιερωμένη σε μια λύση TensorFlow. Αυτή η μέθοδος είναι πιο περίπλοκη από την άλλη.

Σημειώστε ότι εάν χρησιμοποιείτε το σημειωματάριο Jupyter, πρέπει να κάνετε επανεκκίνηση και να καθαρίσετε τον πυρήνα για να εκτελέσετε αυτήν την περίοδο λειτουργίας.

Η TensorFlow δημιούργησε ένα εξαιρετικό εργαλείο για να μεταφέρει τα δεδομένα στο σωστό. Σε αυτήν την ενότητα, θα δημιουργήσετε τη συνάρτηση input_fn μόνοι σας.

Βήμα 1) Ορίστε τη διαδρομή και τη μορφή των δεδομένων

Πρώτα απ 'όλα, δηλώνετε δύο μεταβλητές με τη διαδρομή του αρχείου csv. Λάβετε υπόψη ότι έχετε δύο αρχεία, ένα για το σετ προπόνησης και ένα για το σετ δοκιμών.

import tensorflow as tf
df_train = "E:/boston_train.csv"
df_eval = "E:/boston_test.csv"

Στη συνέχεια, πρέπει να ορίσετε τις στήλες που θέλετε να χρησιμοποιήσετε από το αρχείο csv. Θα χρησιμοποιήσουμε όλα. Μετά από αυτό, πρέπει να δηλώσετε τον τύπο της μεταβλητής που είναι.

Η μεταβλητή Floats ορίζεται από [0]

COLUMNS = ["crim", "zn", "indus", "nox", "rm", "age","dis", "tax", "ptratio", "medv"]RECORDS_ALL = [[0.0], [0.0], [0.0], [0.0],[0.0],[0.0],[0.0],[0.0],[0.0],[0.0]] 

Βήμα 2) Ορίστε τη συνάρτηση input_fn

Η συνάρτηση μπορεί να χωριστεί σε τρία μέρη:

  1. Εισαγάγετε τα δεδομένα
  2. Δημιουργήστε τον επαναληπτικό
  3. Καταναλώστε τα δεδομένα

Παρακάτω είναι ο συνολικός κωδικός για τον ορισμό της συνάρτησης. Ο κωδικός θα εξηγηθεί μετά

def input_fn(data_file, batch_size, num_epoch = None):# Step 1def parse_csv(value):columns = tf.decode_csv(value, record_defaults= RECORDS_ALL)features = dict(zip(COLUMNS, columns))#labels = features.pop('median_house_value')labels = features.pop('medv')return features, labels# Extract lines from input files using theDataset API. dataset = (tf.data.TextLineDataset(data_file) # Read text file.skip(1) # Skip header row.map(parse_csv))dataset = dataset.repeat(num_epoch)dataset = dataset.batch(batch_size)# Step 3iterator = dataset.make_one_shot_iterator()features, labels = iterator.get_next()return features, labels 

** Εισαγωγή δεδομένων **

Για ένα αρχείο csv, η μέθοδος συνόλου δεδομένων διαβάζει μία γραμμή κάθε φορά. Για να δημιουργήσετε το σύνολο δεδομένων, πρέπει να χρησιμοποιήσετε το αντικείμενο TextLineDataset. Το σύνολο δεδομένων σας έχει μια κεφαλίδα, οπότε πρέπει να χρησιμοποιήσετε την παράλειψη (1) για να παραλείψετε την πρώτη γραμμή. Σε αυτό το σημείο, διαβάζετε μόνο τα δεδομένα και εξαιρείτε την κεφαλίδα στο στάδιο της διαδικασίας. Για να τροφοδοτήσετε το μοντέλο, πρέπει να διαχωρίσετε τα χαρακτηριστικά από την ετικέτα. Η μέθοδος που χρησιμοποιείται για την εφαρμογή οποιασδήποτε μετατροπής στα δεδομένα είναι χάρτης.

Αυτή η μέθοδος καλεί μια συνάρτηση που θα δημιουργήσετε για να καθοδηγήσετε τον τρόπο μετατροπής των δεδομένων. Με λίγα λόγια, πρέπει να μεταβιβάσετε τα δεδομένα στο αντικείμενο TextLineDataset, να αποκλείσετε την κεφαλίδα και να εφαρμόσετε έναν μετασχηματισμό που καθοδηγείται από μια συνάρτηση

  • tf.data.TextLineDataset (data_file): Αυτή η γραμμή διαβάζει το αρχείο csv
  • .skip (1): παραλείψτε την κεφαλίδα
  • .map (parse_csv)): ανάλυση των εγγραφών στον τανυστή Πρέπει να ορίσετε μια συνάρτηση για να καθοδηγήσετε το αντικείμενο του χάρτη. Μπορείτε να καλέσετε αυτήν τη συνάρτηση parse_csv.

Αυτή η συνάρτηση αναλύει το αρχείο csv με τη μέθοδο tf.decode_csv και δηλώνει τις δυνατότητες και την ετικέτα. Τα χαρακτηριστικά μπορούν να δηλωθούν ως λεξικό ή πλειάδα. Χρησιμοποιείτε τη μέθοδο λεξικού επειδή είναι πιο βολική. Επεξήγηση κωδικού

  • tf.decode_csv (τιμή, record_defaults = RECORDS_ALL): η μέθοδος decode_csv χρησιμοποιεί την έξοδο του TextLineDataset για να διαβάσει το αρχείο csv. Το record_defaults δίνει εντολή στο TensorFlow σχετικά με τον τύπο στηλών.
  • υπαγόρευση (zip (_CSV_COLUMNS, στήλες)): Συμπληρώστε το λεξικό με όλες τις στήλες που εξήχθησαν κατά τη διάρκεια αυτής της επεξεργασίας δεδομένων
  • Features.pop ('median_house_value'): Εξαιρέστε τη μεταβλητή στόχου από τη μεταβλητή χαρακτηριστικών και δημιουργήστε μια μεταβλητή ετικέτας

Το σύνολο δεδομένων χρειάζεται περαιτέρω στοιχεία για να τροφοδοτεί επαναληπτικά το Tensors. Πράγματι, πρέπει να προσθέσετε τη μέθοδο επανάληψης για να επιτρέψετε στο σύνολο δεδομένων να συνεχίσει επ 'αόριστον για να τροφοδοτήσει το μοντέλο. Εάν δεν προσθέσετε τη μέθοδο, το μοντέλο θα επαναλάβει μόνο μία φορά και, στη συνέχεια, θα εμφανίσει σφάλμα, επειδή δεν τροφοδοτούνται περισσότερα δεδομένα.

Μετά από αυτό, μπορείτε να ελέγξετε το μέγεθος παρτίδας με τη μέθοδο παρτίδας. Σημαίνει να πείτε στο σύνολο δεδομένων πόσα δεδομένα θέλετε να περάσετε στον αγωγό για κάθε επανάληψη. Εάν ορίσετε μεγάλο μέγεθος παρτίδας, το μοντέλο θα είναι αργό.

Βήμα 3) Δημιουργήστε τον επαναληπτικό

Τώρα είστε έτοιμοι για το δεύτερο βήμα: δημιουργήστε έναν επαναληπτικό για να επιστρέψετε τα στοιχεία στο σύνολο δεδομένων.

Ο απλούστερος τρόπος δημιουργίας ενός χειριστή είναι με τη μέθοδο make_one_shot_iterator.

Μετά από αυτό, μπορείτε να δημιουργήσετε τις δυνατότητες και τις ετικέτες από τον επαναληπτή.

Βήμα 4) Καταναλώστε τα δεδομένα

Μπορείτε να ελέγξετε τι συμβαίνει με τη συνάρτηση input_fn. Πρέπει να καλέσετε τη συνάρτηση σε μια συνεδρία για να καταναλώσετε τα δεδομένα. Προσπαθείτε με μέγεθος παρτίδας ίσο με 1.

Σημειώστε ότι, εκτυπώνει τις δυνατότητες σε ένα λεξικό και την ετικέτα ως πίνακα.

Θα εμφανίσει την πρώτη γραμμή του αρχείου csv. Μπορείτε να προσπαθήσετε να εκτελέσετε αυτόν τον κώδικα πολλές φορές με διαφορετικό μέγεθος παρτίδας.

next_batch = input_fn(df_train, batch_size = 1, num_epoch = None)with tf.Session() as sess:first_batch = sess.run(next_batch)print(first_batch) 

Παραγωγή

({'crim': array([2.3004], dtype=float32), 'zn': array([0.], dtype=float32), 'indus': array([19.58], dtype=float32), 'nox': array([0.605], dtype=float32), 'rm': array([6.319], dtype=float32), 'age': array([96.1], dtype=float32), 'dis': array([2.1], dtype=float32), 'tax': array([403.], dtype=float32), 'ptratio': array([14.7], dtype=float32)}, array([23.8], dtype=float32))

Βήμα 4) Ορίστε τη στήλη χαρακτηριστικών

Πρέπει να ορίσετε τις αριθμητικές στήλες ως εξής:

X1= tf.feature_column.numeric_column('crim')X2= tf.feature_column.numeric_column('zn')X3= tf.feature_column.numeric_column('indus')X4= tf.feature_column.numeric_column('nox')X5= tf.feature_column.numeric_column('rm')X6= tf.feature_column.numeric_column('age')X7= tf.feature_column.numeric_column('dis')X8= tf.feature_column.numeric_column('tax')X9= tf.feature_column.numeric_column('ptratio') 

Σημειώστε ότι πρέπει να συνδυάσετε όλες τις μεταβλητές σε έναν κάδο

base_columns = [X1, X2, X3,X4, X5, X6,X7, X8, X9] 

Βήμα 5) Δημιουργήστε το μοντέλο

Μπορείτε να εκπαιδεύσετε το μοντέλο με τον εκτιμητή LinearRegressor.

model = tf.estimator.LinearRegressor(feature_columns=base_columns, model_dir='train3') 

Παραγωγή

INFO:tensorflow:Using default config. INFO:tensorflow:Using config: {'_model_dir': 'train3', '_tf_random_seed': None, '_save_summary_steps': 100, '_save_checkpoints_steps': None, '_save_checkpoints_secs': 600, '_session_config': None, '_keep_checkpoint_max': 5, '_keep_checkpoint_every_n_hours': 10000, '_log_step_count_steps': 100, '_train_distribute': None, '_service': None, '_cluster_spec': , '_task_type': 'worker', '_task_id': 0, '_global_id_in_cluster': 0, '_master': '', '_evaluation_master': '', '_is_chief': True, '_num_ps_replicas': 0, '_num_worker_replicas': 1}

Πρέπει να χρησιμοποιήσετε μια συνάρτηση lambda για να επιτρέψετε την εγγραφή του ορίσματος στη συνάρτηση inpu_fn. Εάν δεν χρησιμοποιείτε τη λειτουργία lambda, δεν μπορείτε να εκπαιδεύσετε το μοντέλο.

# Train the estimatormodel.train(steps =1000,input_fn= lambda : input_fn(df_train,batch_size=128, num_epoch = None)) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Create CheckpointSaverHook.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Saving checkpoints for 1 into train3/model.ckpt.INFO:tensorflow:loss = 83729.64, step = 1INFO:tensorflow:global_step/sec: 72.5646INFO:tensorflow:loss = 13909.657, step = 101 (1.380 sec)INFO:tensorflow:global_step/sec: 101.355INFO:tensorflow:loss = 12881.449, step = 201 (0.986 sec)INFO:tensorflow:global_step/sec: 109.293INFO:tensorflow:loss = 12391.541, step = 301 (0.915 sec)INFO:tensorflow:global_step/sec: 102.235INFO:tensorflow:loss = 12050.5625, step = 401 (0.978 sec)INFO:tensorflow:global_step/sec: 104.656INFO:tensorflow:loss = 11766.134, step = 501 (0.956 sec)INFO:tensorflow:global_step/sec: 106.697INFO:tensorflow:loss = 11509.922, step = 601 (0.938 sec)INFO:tensorflow:global_step/sec: 118.454INFO:tensorflow:loss = 11272.889, step = 701 (0.844 sec)INFO:tensorflow:global_step/sec: 114.947INFO:tensorflow:loss = 11051.9795, step = 801 (0.870 sec)INFO:tensorflow:global_step/sec: 111.484INFO:tensorflow:loss = 10845.855, step = 901 (0.897 sec)INFO:tensorflow:Saving checkpoints for 1000 into train3/model.ckpt.INFO:tensorflow:Loss for final step: 5925.9873.Out[8]:

Μπορείτε να αξιολογήσετε την προσαρμογή του μοντέλου σας στο σετ δοκιμών με τον παρακάτω κώδικα:

results = model.evaluate(steps =None,input_fn=lambda: input_fn(df_eval, batch_size =128, num_epoch = 1))for key in results:print(" {}, was: {}".format(key, results[key])) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Starting evaluation at 2018-05-13-02:06:02INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train3/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.INFO:tensorflow:Finished evaluation at 2018-05-13-02:06:02INFO:tensorflow:Saving dict for global step 1000: average_loss = 32.15896, global_step = 1000, loss = 3215.896average_loss, was: 32.158958435058594loss, was: 3215.89599609375global_step, was: 1000

Το τελευταίο βήμα είναι η πρόβλεψη της τιμής με βάση την τιμή των πινάκων των χαρακτηριστικών. Μπορείτε να γράψετε ένα λεξικό με τις τιμές που θέλετε να προβλέψετε. Το μοντέλο σας διαθέτει 9 δυνατότητες, οπότε πρέπει να παρέχετε μια τιμή για κάθε μία. Το μοντέλο θα παρέχει μια πρόβλεψη για καθένα από αυτά.

Στον παρακάτω κώδικα, γράψατε τις τιμές κάθε δυνατότητας που περιέχεται στο αρχείο df_predict csv.

Πρέπει να γράψετε μια νέα συνάρτηση input_fn επειδή δεν υπάρχει ετικέτα στο σύνολο δεδομένων. Μπορείτε να χρησιμοποιήσετε το API from_tensor από το σύνολο δεδομένων.

prediction_input = {'crim': [0.03359,5.09017,0.12650,0.05515,8.15174,0.24522],'zn': [75.0,0.0,25.0,33.0,0.0,0.0],'indus': [2.95,18.10,5.13,2.18,18.10,9.90],'nox': [0.428,0.713,0.453,0.472,0.700,0.544],'rm': [7.024,6.297,6.762,7.236,5.390,5.782],'age': [15.8,91.8,43.4,41.1,98.9,71.7],'dis': [5.4011,2.3682,7.9809,4.0220,1.7281,4.0317],'tax': [252,666,284,222,666,304],'ptratio': [18.3,20.2,19.7,18.4,20.2,18.4]}def test_input_fn():dataset = tf.data.Dataset.from_tensors(prediction_input)return dataset# Predict all our prediction_inputpred_results = model.predict(input_fn=test_input_fn) 

Τέλος, εκτυπώνετε τις προβλέψεις.

for pred in enumerate(pred_results):print(pred) 

Παραγωγή

INFO:tensorflow:Calling model_fn.INFO:tensorflow:Done calling model_fn.INFO:tensorflow:Graph was finalized.INFO:tensorflow:Restoring parameters from train3/model.ckpt-1000INFO:tensorflow:Running local_init_op.INFO:tensorflow:Done running local_init_op.(0, {'predictions': array([32.297546], dtype=float32)})(1, {'predictions': array([18.96125], dtype=float32)})(2, {'predictions': array([27.270979], dtype=float32)})(3, {'predictions': array([29.299236], dtype=float32)})(4, {'predictions': array([16.436684], dtype=float32)})(5, {'predictions': array([21.460876], dtype=float32)})INFO:tensorflow:Calling model_fn. INFO:tensorflow:Done calling model_fn. INFO:tensorflow:Graph was finalized. INFO:tensorflow:Restoring parameters from train3/model.ckpt-5000 INFO:tensorflow:Running local_init_op. INFO:tensorflow:Done running local_init_op. (0, {'predictions': array([35.60663], dtype=float32)}) (1, {'predictions': array([22.298521], dtype=float32)}) (2, {'predictions': array([25.74533], dtype=float32)}) (3, {'predictions': array([35.126694], dtype=float32)}) (4, {'predictions': array([17.94416], dtype=float32)}) (5, {'predictions': array([22.606628], dtype=float32)})

Περίληψη

Για να εκπαιδεύσετε ένα μοντέλο, πρέπει να:

  • Ορίστε τα χαρακτηριστικά: Ανεξάρτητες μεταβλητές: X
  • Ορίστε την ετικέτα: Εξαρτώμενη μεταβλητή: y
  • Κατασκευάστε ένα σετ τρένων / δοκιμών
  • Ορίστε το αρχικό βάρος
  • Ορίστε τη λειτουργία απώλειας: MSE
  • Βελτιστοποιήστε το μοντέλο: Διαβάθμιση κλίσης
  • Καθορίζω:
    • Ποσοστό εκμάθησης
    • Αριθμός εποχής
    • Μέγεθος παρτίδας

Σε αυτό το σεμινάριο, μάθατε πώς να χρησιμοποιείτε το API υψηλού επιπέδου για έναν εκτιμητή γραμμικής παλινδρόμησης TensorFlow. Πρέπει να ορίσετε:

  1. Δυνατότητες στηλών. Εάν είναι συνεχής: tf.feature_column.numeric_column (). Μπορείτε να συμπληρώσετε μια λίστα με κατανόηση λίστας python
  2. Ο εκτιμητής: tf.estimator.LinearRegressor (feature_columns, model_dir)
  3. Μια συνάρτηση για την εισαγωγή των δεδομένων, το μέγεθος της παρτίδας και την εποχή: input_fn ()

Μετά από αυτό, είστε έτοιμοι να εκπαιδεύσετε, να αξιολογήσετε και να κάνετε προβλέψεις με το τρένο (), να αξιολογήσετε () και να προβλέψετε ()