Εκμάθηση γραμμικής παλινδρόμησης με TensorFlow [Παραδείγματα]

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Με:

  • Γραμμική παλινδρόμηση με TensorFlow είναι η προκατάληψη. δηλαδή αν x=0, y=Εκπαιδεύστε ένα μοντέλο γραμμικής παλινδρόμησης
  • Εκπαιδεύστε ένα μοντέλο γραμμικής παλινδρόμησης είναι το βάρος που σχετίζεται με το x
  • Εκπαιδεύστε ένα μοντέλο γραμμικής παλινδρόμησης είναι το υπόλοιπο ή το σφάλμα του μοντέλου. Περιλαμβάνει όσα το μοντέλο δεν μπορεί να μάθει από τα δεδομένα

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

  • Εκπαιδεύστε ένα μοντέλο γραμμικής παλινδρόμησης = 3.8
  • Εκπαιδεύστε ένα μοντέλο γραμμικής παλινδρόμησης = 2.78

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

y= 3.8 + 2.78x

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

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

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

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

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

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

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

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

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

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

Εργασία Αλγορίθμου

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

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

Εργασία Αλγορίθμου

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

Εργασία Αλγορίθμου

Που:

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

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

Στόχος είναι να βρεις το καλύτερο Εργασία Αλγορίθμου που ελαχιστοποιούν το MSE

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

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

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

Εργασία Αλγορίθμου

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

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

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

Εργασία Αλγορίθμου

Τα τελικά βάρη είναι 3.8 και 2.78. Το παρακάτω βίντεο σάς δείχνει πώς η κλίση κατάβασης βελτιστοποιεί τη συνάρτηση απώλειας για να βρείτε αυτά τα βάρη

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

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

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

εγκληματικότητα κατά κεφαλήν ποσοστό εγκληματικότητας ανά πόλη
zn αναλογία γης οικιστικής ζώνης για οικόπεδα άνω των 25,000 τ.μ.
Ινδός αναλογία των στρεμμάτων επιχειρήσεων μη λιανικής ανά πόλη.
nox συγκέντρωση νιτρικών οξειδίων
rm μέσος αριθμός δωματίων ανά κατοικία
την ηλικία του ποσοστό των ιδιοκατοικούμενων μονάδων που κατασκευάστηκαν πριν από το 1940
dis σταθμισμένες αποστάσεις σε πέντε κέντρα απασχόλησης της Βοστώνης
φόρος συντελεστής φόρου ακινήτων πλήρους αξίας ανά 10,000 δολάρια
ptratio αναλογία μαθητών-δασκάλων ανά πόλη
medv Διάμεση αξία κατοικιών σε χιλιάδες δολάρια

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

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

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

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

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

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

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

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

Πάντα

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

import pandas as pd
from sklearn import datasets
import tensorflow as tf
import itertools

Βήμα 1) Εισαγάγετε τα δεδομένα με αρκτοειδές ζώο της ασίας.

Ορίζετε τα ονόματα των στηλών και τα αποθηκεύετε σε 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, names=COLUMNS)

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, names=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().

Στο προηγούμενο βήμα, ορίζετε μια λίστα μια δυνατότητα που θέλετε να συμπεριλάβετε στο μοντέλο. Τώρα μπορείτε να χρησιμοποιήσετε αυτήν τη λίστα για να τα μετατρέψετε σε αριθμητικά δεδομένα. Εάν θέλετε να εξαιρέσετε λειτουργίες στο μοντέλο σας, μη διστάσετε να ρίξετε μία ή περισσότερες μεταβλητές στη λίστα FEATURES πριν δημιουργήσετε το feature_cols

Σημειώστε ότι θα χρησιμοποιήσετε Python κατανόηση λίστας με τη λίστα FEATURES για τη δημιουργία μιας νέας λίστας με το όνομα 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:

  • Αναδρομικός
    • DNN Regressor
    • LinearRegressor
    • 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': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1a215dc550>, '_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 = 1
INFO:tensorflow:global_step/sec: 238.616
INFO:tensorflow:loss = 13909.657, step = 101 (0.420 sec)
INFO:tensorflow:global_step/sec: 314.293
INFO:tensorflow:loss = 12881.449, step = 201 (0.320 sec)
INFO:tensorflow:global_step/sec: 303.863
INFO:tensorflow:loss = 12391.541, step = 301 (0.327 sec)
INFO:tensorflow:global_step/sec: 308.782
INFO:tensorflow:loss = 12050.5625, step = 401 (0.326 sec)
INFO:tensorflow:global_step/sec: 244.969
INFO:tensorflow:loss = 11766.134, step = 501 (0.407 sec)
INFO:tensorflow:global_step/sec: 155.966
INFO:tensorflow:loss = 11509.922, step = 601 (0.641 sec)
INFO:tensorflow:global_step/sec: 263.256
INFO:tensorflow:loss = 11272.889, step = 701 (0.379 sec)
INFO:tensorflow:global_step/sec: 254.112
INFO:tensorflow:loss = 11051.9795, step = 801 (0.396 sec)
INFO:tensorflow:global_step/sec: 292.405
INFO: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 MacOS
tensorboard --logdir=./train
# For Windows
tensorboard --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:13
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from train/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2018-05-13-01:43:13
INFO: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.000000
mean      22.625500
std        9.572593
min        5.000000
25%       16.600000
50%       21.400000
75%       25.025000
max       50.000000
Name: medv, dtype: float64

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

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

Τέλος, μπορείτε να χρησιμοποιήσετε τον εκτιμητή TensorFlow predict για να υπολογίσετε την αξία 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-1000
INFO: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 για την τροφοδοσία των δεδομένων. Η μέθοδος είναι η ίδια εκτός από την οποία θα χρησιμοποιήσετε τον εκτιμητή 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': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1a218d8f28>, '_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 = 1
INFO:tensorflow:global_step/sec: 490.057
INFO:tensorflow:loss = 13909.656, step = 101 (0.206 sec)
INFO:tensorflow:global_step/sec: 788.986
INFO:tensorflow:loss = 12881.45, step = 201 (0.126 sec)
INFO:tensorflow:global_step/sec: 736.339
INFO:tensorflow:loss = 12391.541, step = 301 (0.136 sec)
INFO:tensorflow:global_step/sec: 383.305
INFO:tensorflow:loss = 12050.561, step = 401 (0.260 sec)
INFO:tensorflow:global_step/sec: 859.832
INFO:tensorflow:loss = 11766.133, step = 501 (0.117 sec)
INFO:tensorflow:global_step/sec: 804.394
INFO:tensorflow:loss = 11509.918, step = 601 (0.125 sec)
INFO:tensorflow:global_step/sec: 753.059
INFO:tensorflow:loss = 11272.891, step = 701 (0.134 sec)
INFO:tensorflow:global_step/sec: 402.165
INFO:tensorflow:loss = 11051.979, step = 801 (0.248 sec)
INFO:tensorflow:global_step/sec: 344.022
INFO: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]:
<tensorflow.python.estimator.canned.linear.LinearRegressor at 0x1a1b6ea860>

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

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

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

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-1000
INFO: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. Θα τα χρησιμοποιήσουμε όλα. Μετά από αυτό, πρέπει να δηλώσετε τον τύπο της μεταβλητής.

Οι μεταβλητές float ορίζονται από [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 1				
          def 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 the 
          Dataset 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 3    
          iterator = dataset.make_one_shot_iterator()    
          features, labels = iterator.get_next()    
          return features, labels

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

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

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

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

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

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

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

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

Βήμα 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': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1820a010f0>, '_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}

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

# 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 = 1
INFO:tensorflow:global_step/sec: 72.5646
INFO:tensorflow:loss = 13909.657, step = 101 (1.380 sec)
INFO:tensorflow:global_step/sec: 101.355
INFO:tensorflow:loss = 12881.449, step = 201 (0.986 sec)
INFO:tensorflow:global_step/sec: 109.293
INFO:tensorflow:loss = 12391.541, step = 301 (0.915 sec)
INFO:tensorflow:global_step/sec: 102.235
INFO:tensorflow:loss = 12050.5625, step = 401 (0.978 sec)
INFO:tensorflow:global_step/sec: 104.656
INFO:tensorflow:loss = 11766.134, step = 501 (0.956 sec)
INFO:tensorflow:global_step/sec: 106.697
INFO:tensorflow:loss = 11509.922, step = 601 (0.938 sec)
INFO:tensorflow:global_step/sec: 118.454
INFO:tensorflow:loss = 11272.889, step = 701 (0.844 sec)
INFO:tensorflow:global_step/sec: 114.947
INFO:tensorflow:loss = 11051.9795, step = 801 (0.870 sec)
INFO:tensorflow:global_step/sec: 111.484
INFO: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]:
<tensorflow.python.estimator.canned.linear.LinearRegressor at 0x18225eb8d0>

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

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:02
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from train3/model.ckpt-1000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Finished evaluation at 2018-05-13-02:06:02
INFO:tensorflow:Saving dict for global step 1000: average_loss = 32.15896, global_step = 1000, loss = 3215.896
   average_loss, was: 32.158958435058594
   loss, was: 3215.89599609375
   global_step, was: 1000

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

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

Πρέπει να γράψετε μια νέα συνάρτηση 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-1000
INFO: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()

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