Tutorial zur linearen Regression mit TensorFlow [Beispiele]

โšก Intelligente Zusammenfassung

Die lineare Regression in TensorFlow modelliert die Beziehung zwischen numerischen Merkmalen und einem kontinuierlichen Zielwert. In diesem Beispiel wird ein Bostoner Immobilienpreis-Vorhersagemodell auf drei verschiedene Arten trainiert: mit Pandas, NumPy und der nativen TensorFlow-Eingabepipeline mit dem LinearRegressor-Schรคtzer.

  • ๐Ÿ”˜ Modellform: Eine lineare Regression passt y = bias + weight ร— x an, erweitert um weitere Kovariaten fรผr multivariate Probleme.
  • โ˜‘๏ธ Trainingsschleife: Der Gradientenabstieg passt die Gewichte in jeder Iteration so lange an, bis der mittlere quadratische Fehler nicht mehr sinkt.
  • โœ… Estimator-API: LinearRegressor benรถtigt lediglich Merkmalsspalten, ein Modellverzeichnis und eine Eingabefunktion.
  • ๐Ÿงช Drei Pipelines: Pandas-, NumPy- und native TensorFlow-Datensรคtze speisen dasselbe Modell und liefern identische Vorhersagen.
  • ๏ธ Ausgearbeitetes Beispiel: Neun Bostoner Merkmale sagen den mittleren Hauswert voraus und erreichen einen Testverlust von 3215.
  • โš ๏ธ Realitรคt der Version: Estimators wurden in TensorFlow 2.12 als veraltet markiert und in 2.16 entfernt, daher mรผssen neue Arbeiten auf Keras portiert werden.

Lineare Regression mit TensorFlow

Was ist lineare Regression?

Lineare Regression Die lineare Regression ist ein statistisches Verfahren zur Modellierung von Beziehungen zwischen zwei Variablen. Dabei wird eine skalare ZielgrรถรŸe mit einer oder mehreren erklรคrenden Variablen verglichen. Die Beziehung mit einer erklรคrenden Variable wird als einfache lineare Regression bezeichnet, die mit mehreren erklรคrenden Variablen als multiple lineare Regression.

TensorFlow bietet Tools, mit denen Sie die vollstรคndige Kontrolle รผber die Berechnungen haben. Dies geschieht mit der Low-Level-API. Darรผber hinaus ist TensorFlow mit einer Vielzahl von APIs ausgestattet, um viele Aufgaben auszufรผhren Maschinelles Lernen Algorithmen. Dies ist die High-Level-API, und TensorFlow nennt sie Schรคtzer.

  • Low-Level-APIDie Architektur und Optimierung des Modells von Grund auf neu zu entwickeln, ist fรผr einen Anfรคnger kompliziert.
  • High-Level-APIDefiniere den Algorithmus. Er ist benutzerfreundlich. TensorFlow bietet eine Toolbox namens Schรคtzer zu konstruieren, zu trainieren, auszuwerten und eine Vorhersage zu treffen.

In diesem Tutorial verwenden Sie die Nur SchรคtzerDie Berechnungen sind schneller und einfacher umzusetzen. Im ersten Teil wird die Verwendung des Gradientenabstiegs-Optimierers zum Trainieren einer linearen Regression in TensorFlow erlรคutert. Im zweiten Teil verwenden Sie den Boston-Datensatz, um mithilfe eines TensorFlow-Schรคtzers den Preis eines Hauses vorherzusagen.

Laden Sie Boston DataSet herunter

So trainieren Sie ein lineares Regressionsmodell

Bevor wir mit dem Training des Modells beginnen, wollen wir uns ansehen, was eine lineare Regression eigentlich ist.

Stellen Sie sich vor, Sie haben zwei Variablen, x und y, und Ihre Aufgabe ist es, den Wert von y anhand des Wertes von x vorherzusagen. Wenn Sie die Daten grafisch darstellen, erkennen Sie einen positiven Zusammenhang zwischen Ihrer unabhรคngigen Variablen x und Ihrer abhรคngigen Variablen y, wie das untenstehende Streudiagramm zeigt.

Streudiagramm von x gegen y, das einen positiven linearen Zusammenhang zeigt

Man kann feststellen, dass y ungefรคhr gleich 6 ist, wenn x=1, und dass y ungefรคhr 8.5 ist, wenn x=2.

Dies ist keine sehr genaue Methode und fehleranfรคllig, insbesondere bei einem Datensatz mit Hunderttausenden von Punkten.

Eine lineare Regression wird mit einer Gleichung ausgewertet. Die Variable y wird durch eine oder mehrere Kovariaten erklรคrt. In Ihrem Beispiel gibt es nur eine abhรคngige Variable. Wenn Sie diese Gleichung schreiben mรผssen, lautet sie:

Einfache lineare Regressionsgleichung mit einem Bias, einem Gewicht und einem Fehlerterm

Mit:

  • Symbol fรผr Bias-Koeffizient ist die Verzerrung. Das heiรŸt, wenn x=0, dann ist y=Wert des Bias-Koeffizienten, wenn x gleich Null ist
  • Symbol fรผr den Gewichtungskoeffizienten, der mit x verbunden ist ist das Gewicht, das mit x verbunden ist.
  • Symbol fรผr Restfehlerterm Das ist das Residuum oder der Fehler des Modells. Es umfasst das, was das Modell aus den Daten nicht lernen kann.

Stellen Sie sich vor, Sie passen das Modell an und finden die folgende Lรถsung fรผr:

  • Der angepasste Bias-Koeffizient betrรคgt 3.8. = 3.8
  • Der angepasste Gewichtungskoeffizient betrรคgt 2.78. = 2.78

Sie kรถnnen diese Zahlen in die Gleichung einsetzen und sie lautet:

y= 3.8 + 2.78x

Sie haben nun eine bessere Methode, die Werte fรผr y zu bestimmen. Das heiรŸt, Sie kรถnnen x durch einen beliebigen Wert ersetzen, um y vorherzusagen. In der Abbildung unten haben wir x in der Gleichung durch alle Werte des Datensatzes ersetzt und das Ergebnis grafisch dargestellt.

Die angepasste Regressionsgerade wurde rot durch die eingezeichneten Datenpunkte gezeichnet.

Die rote Linie stellt den angepassten Wert dar, also die y-Werte fรผr jeden x-Wert. Sie mรผssen den x-Wert nicht kennen, um y vorherzusagen; jedem x-Wert ist ein Wert auf der roten Linie zugeordnet. Vorhersagen sind auch fรผr x-Werte grรถรŸer als 2 mรถglich.

Um die lineare Regression auf weitere Kovariaten auszudehnen, kรถnnen Sie dem Modell zusรคtzliche Variablen hinzufรผgen. Der Unterschied zwischen traditioneller Analyse und linearer Regression besteht darin, dass die lineare Regression untersucht, wie y auf jede einzelne Variable x reagiert.

Betrachten wir ein Beispiel. Stellen Sie sich vor, Sie mรถchten die Umsรคtze einer Eisdiele vorhersagen. Der Datensatz enthรคlt verschiedene Informationen, wie zum Beispiel das Wetter (regnerisch, sonnig, bewรถlkt) und Kundeninformationen (Gehalt, Geschlecht, Familienstand).

Die traditionelle Analyse versucht, den Umsatz vorherzusagen, indem sie beispielsweise den Durchschnittswert jeder Variablen berechnet und den Umsatz fรผr verschiedene Szenarien schรคtzt. Dies fรผhrt zu ungenauen Prognosen und beschrรคnkt die Analyse auf das gewรคhlte Szenario.

Wenn Sie die lineare Regression verwenden, kรถnnen Sie diese Gleichung schreiben:

Multiple lineare Regressionsgleichung, die mehrere gewichtete Kovariaten kombiniert

Der Algorithmus wird die beste Lรถsung fรผr die Gewichte finden; das heiรŸt, er wird versuchen, die Kosten zu minimieren, also die Differenz zwischen der angepassten Linie und den Datenpunkten.

Wie der Algorithmus funktioniert

Das folgende Diagramm fasst die Schleife zusammen, die der Algorithmus wiederholt: Gewichte auswรคhlen, y vorhersagen, den Fehler messen und die Gewichte korrigieren.

Flussdiagramm des Trainingszyklus der linearen Regression von zufรคlligen Gewichten bis zur Minimierung des Fehlers

Der Algorithmus wรคhlt fรผr jeden eine Zufallszahl Zufรคllig initialisierter Bias-Koeffizient und Zufรคllig initialisierter Gewichtskoeffizient und ersetzen Sie den Wert von x, um den vorhergesagten Wert von y zu erhalten. Wenn der Datensatz 100 Beobachtungen enthรคlt, berechnet der Algorithmus 100 vorhergesagte Werte.

Wir kรถnnen den Fehler berechnen, notiert Modellfehlerterm, der bei der Verlustberechnung verwendet wirdDer Fehler des Modells ist die Differenz zwischen dem vorhergesagten und dem tatsรคchlichen Wert. Ein positiver Fehler bedeutet, dass das Modell den vorhergesagten Wert von y unterschรคtzt, ein negativer Fehler bedeutet, dass es ihn รผberschรคtzt.

Zielfunktion zur Minimierung des quadratischen Fehlers in mathematischer Notation

Ihr Ziel ist es, das Quadrat des Fehlers zu minimieren. Der Algorithmus berechnet den Mittelwert des quadratischen Fehlers. Dieser Schritt wird als Fehlerminimierung bezeichnet. Bei der linearen Regression ist dies die Mittlerer quadratischer Fehler, auch MSE genannt. Mathematisch ist es:

Formel fรผr den mittleren quadratischen Fehler in Matrixnotation

Kennzahlen:

  • Gewichtsvektorsymbol, das in der MSE-Formel verwendet wird sind die Gewichte, also Notation des vorhergesagten Wertes, die in der MSE-Formel verwendet wird bezieht sich auf den vorhergesagten Wert
  • y sind die tatsรคchlichen Werte
  • m ist die Anzahl der Beobachtungen

Beachten Sie, dass Notation der transponierten Gewichtsmatrix bedeutet, dass die Transponierte der Matrizen verwendet wird. Der Summen- und Mittelwertnotation, die in der MSE-Formel verwendet werden ist die mathematische Schreibweise des Mittelwerts.

Das Ziel ist es, das Beste zu finden Symbol fรผr optimales Gewicht, das den mittleren quadratischen Fehler (MSE) minimiert. das minimiert den MSE.

Wenn der durchschnittliche Fehler groรŸ ist, bedeutet dies, dass das Modell eine schlechte Leistung erbringt und die Gewichte nicht richtig gewรคhlt sind. Um die Gewichte zu korrigieren, mรผssen Sie einen Optimierer verwenden. Der traditionelle Optimierer heiรŸt Gradientenabstieg.

Der Gradientenabstieg bildet die Ableitung und verringert oder erhรถht das Gewicht. Ist die Ableitung positiv, wird das Gewicht verringert; ist sie negativ, wird es erhรถht. Das Modell aktualisiert die Gewichte und berechnet den Fehler neu. Dieser Prozess wird wiederholt, bis sich der Fehler nicht mehr รคndert. Jeder Durchlauf wird als Fehlerdurchlauf bezeichnet. IterationAuรŸerdem werden die Gradienten mit einer Lernrate multipliziert, die die Lerngeschwindigkeit angibt.

Ist die Lernrate zu niedrig, dauert es sehr lange, bis der Algorithmus konvergiert, da er deutlich mehr Iterationen benรถtigt. Ist die Lernrate zu hoch, konvergiert der Algorithmus mรถglicherweise nie. Die untenstehende Verlustkurve zeigt den Fehler in Abhรคngigkeit von der Anzahl der Iterationen fรผr diesen Datensatz.

Die Verlustkurve zeigt, wie der Fehler nach etwa zwanzig Iterationen abnimmt und sich stabilisiert.

Aus dem obigen Bild ist ersichtlich, dass das Modell den Prozess etwa 20 Mal wiederholt, bevor es einen stabilen Wert fรผr die Gewichte findet und somit den geringsten Fehler erreicht.

Beachten Sie, dass der Fehler nicht gleich Null ist, sondern sich um 5 stabilisiert. Das bedeutet, dass das Modell einen typischen Fehler von 5 aufweist. Um den Fehler zu reduzieren, mรผssen Sie dem Modell weitere Informationen hinzufรผgen, z. B. weitere Variablen, oder andere Schรคtzer verwenden.

Sie erinnern sich an die erste Gleichung:

Endgรผltige angepasste lineare Regressionsgleichung mit den ermittelten Gewichten

Die endgรผltigen Gewichte sind 3.8 und 2.78. Das folgende Video zeigt, wie der Gradientenabstieg die Verlustfunktion optimiert, um diese Gewichte zu finden.

So trainieren Sie eine lineare Regression mit TensorFlow

Da Sie nun besser verstehen, was hinter der Haube passiert, kรถnnen Sie die von TensorFlow bereitgestellte Schรคtzer-API verwenden, um Ihre erste lineare Regression mit TensorFlow zu trainieren.

Versionshinweis: Der unten dargestellte Estimator-Workflow wurde fรผr TensorFlow 1.x und die frรผhen Versionen von 2.x entwickelt. TensorFlow hat die tf.estimator und tf.feature_column Die APIs sind in Version 2.12 vollstรคndig veraltet und die Estimators wurden in Version 2.16 entfernt. Fรผhren Sie diesen Code bei einer aktuellen Installation in einem TensorFlow 1.15- oder 2.x-Container aus.tf.compat.v1 Umgebung oder portieren Sie es nach Keras, wo tf.keras.layers.Dense(1) Zusรคtzlich ersetzen Vorverarbeitungsschichten den LinearRegressor und die Merkmalsspalten. Die Konzepte โ€“ Merkmale, Labels, Batches, Epochen, MSE und Gradientenabstieg โ€“ bleiben unverรคndert.

Sie werden den Boston-Datensatz verwenden, der die folgenden Variablen enthรคlt.

Variable Beschreibung
kriminell Pro-Kopf-Kriminalitรคtsrate nach Stadt
zn Anteil des Wohngrundstรผcks, das fรผr Grundstรผcke รผber 25,000 QuadratfuรŸ ausgewiesen ist.
Indus Anteil der Nicht-Einzelhandelsflรคchen pro Stadt.
Nox Stickoxidkonzentration
rm durchschnittliche Zimmeranzahl pro Wohnung
Alter Anteil der vor 1940 gebauten Eigentumswohnungen
dis gewichtete Entfernungen zu fรผnf Bostoner Arbeitsvermittlungszentren
Steuer Vollwert-Grundsteuersatz pro 10,000 Dollar
ptratio Schรผler-Lehrer-Verhรคltnis nach Stadt
mit V Medianwert der Eigentumswohnungen in Tausend Dollar

Sie erstellen drei verschiedene Datensรคtze:

Datensatz Ziel gestalten
Training Trainieren Sie das Modell und ermitteln Sie die Gewichte 400, 10
Evaluierung Bewerten Sie die Leistung des Modells anhand unsichtbarer Daten 100, 10
Vorhersagen Verwenden Sie das Modell, um den Hauswert anhand neuer Daten vorherzusagen 6, 10

Ziel ist es, anhand der Merkmale des Datensatzes den Wert des Hauses vorherzusagen.

Im zweiten Teil des Tutorials lernen Sie, wie Sie TensorFlow verwenden und die Daten auf drei verschiedene Arten importieren:

  • Mit Pandas
  • Mit NumPy
  • Nur TensorFlow

Beachten Sie, dass alle drei Optionen zum gleichen Ergebnis fรผhren.

Sie lernen, wie Sie die High-Level-API verwenden, um ein lineares Regressionsmodell von TensorFlow zu erstellen, zu trainieren und zu evaluieren. Bei Verwendung der Low-Level-API mรผssten Sie Folgendes manuell definieren:

  • Verlustfunktion
  • Optimierer: Gradientenabstieg
  • Matrix-Multiplikation
  • Graph und Tensor

Das ist mรผhsam und fรผr einen Anfรคnger komplizierter.

Pandas-Lรถsung

Sie mรผssen die erforderlichen Bibliotheken importieren, um das Modell zu trainieren.

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

Schritt 1) Importieren Sie die Daten mit Pandas.

Sie definieren die Spaltennamen und speichern sie in COLUMNS. AnschlieรŸend kรถnnen Sie die Daten mit pd.read_csv() importieren.

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

Richten Sie jeden Aufruf auf die zuvor heruntergeladenen CSV-Dateien.

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)

Sie kรถnnen die Form der Daten drucken.

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

Ausgang

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

Beachten Sie, dass die Zielvariable (y) im Datensatz enthalten ist. Daher mรผssen Sie zwei weitere Listen definieren: eine, die nur die Merkmale enthรคlt, und eine, die nur den Namen der Zielvariable enthรคlt. Diese beiden Listen teilen Ihrem Schรคtzer mit, welche Merkmale im Datensatz vorhanden sind und welche Spalte die Zielvariable darstellt.

Dies geschieht mit dem folgenden Code.

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

Schritt 2) Konvertieren Sie die Daten

Sie mรผssen die numerischen Variablen in das richtige Format konvertieren. TensorFlow bietet eine Methode zur Konvertierung einer kontinuierlichen Variable: tf.feature_column.numeric_column().

Im vorherigen Schritt haben Sie eine Liste von Merkmalen definiert, die Sie in das Modell aufnehmen mรถchten. Nun kรถnnen Sie diese Liste verwenden, um die Merkmale in numerische Daten umzuwandeln. Wenn Sie Merkmale aus Ihrem Modell ausschlieรŸen mรถchten, kรถnnen Sie vor der Erstellung von feature_cols eine oder mehrere Variablen aus der Liste FEATURES entfernen.

Beachten Sie, dass Sie ein/e verwenden werden. Python Eine List Comprehension mit der Liste `FEATURES` erstellt eine neue Liste namens `feature_cols`. Dadurch entfรคllt das neunmalige Aufrufen von `tf.feature_column.numeric_column()`. Eine List Comprehension ist eine schnellere und elegantere Methode, neue Listen zu erstellen.

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

Schritt 3) Definieren Sie den Schรคtzer

In diesem Schritt mรผssen Sie den Schรคtzer definieren. TensorFlow bietet sechs vordefinierte Schรคtzer an, drei fรผr Klassifizierungsaufgaben und drei fรผr TensorFlow-Regressionsaufgaben:

  • Regressor
    • DNNRegressor
    • LinearRegressor
    • DNNLinearCombinedRegressor
  • klassifizieren
    • DNNClassifier
    • LinearClassifier
    • DNNLinearCombinedClassifier

In diesem Tutorial verwenden Sie den linearen Regressor. Um auf diese Funktion zuzugreifen, mรผssen Sie tf.estimator verwenden.

Die Funktion benรถtigt zwei Argumente:

  • feature_columns: Enthรคlt die Variablen, die in das Modell aufgenommen werden sollen.
  • model_dir: Pfad zum Speichern des Graphen, der Modellparameter usw.

TensorFlow erstellt automatisch einen Ordner namens โ€žtrainโ€œ in Ihrem Arbeitsverzeichnis. Sie mรผssen diesen Pfad verwenden, um darauf zuzugreifen. TensorBoard, wie im folgenden TensorFlow-Regressionsbeispiel gezeigt wird.

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

Ausgang

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}

Die Schwierigkeit bei TensorFlow liegt in der Datenzufuhr zum Modell. TensorFlow ist fรผr paralleles Rechnen und sehr groรŸe Datensรคtze ausgelegt. Aufgrund begrenzter Systemressourcen ist es unmรถglich, dem Modell alle Daten auf einmal zuzufรผhren. Daher muss jedes Mal ein Datenbatch รผbergeben werden. Hierbei handelt es sich um riesige Datensรคtze mit Millionen oder mehr Datensรคtzen. Ohne Batch-Verarbeitung tritt ein Speicherfehler auf.

Wenn Ihre Daten beispielsweise 100 Beobachtungen enthalten und Sie eine StapelgrรถรŸe von 10 definieren, bedeutet dies, dass das Modell 10 Beobachtungen fรผr jede Iteration erkennt (10*10).

Sobald das Modell alle Daten verarbeitet hat, ist eine Epoche abgeschlossen. Eine Epoche definiert, wie oft das Modell die Daten durchlaufen soll. Es empfiehlt sich, diesen Schritt auf โ€žkeineโ€œ zu setzen und das Modell eine festgelegte Anzahl von Iterationen durchfรผhren zu lassen.

Eine weitere wichtige Information ist, ob die Daten vor jeder Iteration gemischt werden sollen. Wรคhrend des Trainings ist es wichtig, die Daten zu mischen, damit das Modell kein bestimmtes Muster im Datensatz lernt. Lernt das Modell die Details des zugrundeliegenden Datenmusters, fรคllt es ihm schwer, Vorhersagen fรผr unbekannte Daten zu verallgemeinern. Dies wird als รœberanpassung bezeichnet. Das Modell erzielt zwar gute Ergebnisse mit den Trainingsdaten, kann aber fรผr unbekannte Daten keine korrekten Vorhersagen treffen.

TensorFlow vereinfacht diese beiden Schritte. Sobald die Daten in die Pipeline gelangen, weiรŸ das System, wie viele Beobachtungen benรถtigt werden (Batch) und ob die Daten gemischt werden mรผssen.

Um TensorFlow anzuweisen, wie das Modell gefรผttert werden soll, kรถnnen Sie pandas_input_fn verwenden. Dieses Objekt benรถtigt fรผnf Parameter:

  • x: Feature-Daten
  • y: Etikettendaten
  • Batch_size: Batch. StandardmรครŸig 128
  • num_epoch: Anzahl der Epochen, standardmรครŸig 1
  • Mischen: Daten mischen oder nicht. StandardmรครŸig keine.

Sie mรผssen das Modell mehrmals mit Daten fรผttern, daher definieren Sie eine Funktion, die diesen Vorgang wiederholt. Nennen Sie diese Funktion 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)

Die รผbliche Methode zur Bewertung der Leistung eines Modells ist:

  • Trainiere das Modell
  • Evaluieren Sie das Modell anhand eines anderen Datensatzes
  • Machen Sie eine Vorhersage

Der TensorFlow-Estimator bietet drei verschiedene Funktionen, um diese drei Schritte einfach durchzufรผhren.

Schritt 4) Trainiere das Modell

Sie kรถnnen die Methode `train` des Estimators verwenden, um das Modell anzupassen. Der Estimator benรถtigt eine `input_fn` und die Anzahl der Schritte. Sie kรถnnen die oben erstellte Funktion verwenden, um das Modell zu trainieren. AnschlieรŸend weisen Sie das Modell an, 1000 Mal zu iterieren. Beachten Sie, dass Sie die Anzahl der Epochen nicht angeben; Sie lassen das Modell 1000 Mal iterieren. Wenn Sie die Anzahl der Epochen auf 1 setzen, iteriert das Modell viermal, da der Trainingsdatensatz 400 Datensรคtze enthรคlt und die BatchgrรถรŸe 128 betrรคgt.

  1. 128 Zahnreihen
  2. 128 Zahnreihen
  3. 128 Zahnreihen
  4. 16 Zahnreihen

Daher ist es einfacher, die Anzahl der Epochen auf โ€žNoneโ€œ zu setzen und die Anzahl der Iterationen zu definieren, wie im folgenden TensorFlow-Klassifizierungsbeispiel gezeigt.

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

Ausgang

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.

Sie kรถnnen TensorBoard mit folgendem Befehl รผberprรผfen:

activate hello-tf
# For MacOS
tensorboard --logdir=./train
# For Windows
tensorboard --logdir=train

Schritt 5) Bewerten Sie Ihr Modell

Sie kรถnnen die Anpassung Ihres Modells an den Testsatz mit dem folgenden Code bewerten:

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

Ausgang

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

Sie kรถnnen den Verlust mit dem folgenden Code ausdrucken:

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

Ausgang

Loss: 3215.895996

Das Modell weist einen Verlust von 3215 auf. In den zusammenfassenden Statistiken kรถnnen Sie nachsehen, wie groรŸ der Fehler ist.

training_set['medv'].describe()

Ausgang

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

Aus der obigen Statistik geht hervor, dass der durchschnittliche Hauspreis 22 betrรคgt, mit einem Mindestpreis von 5 und einem Hรถchstpreis von 50. Da der angegebene Verlust der mittlere quadratische Fehler ist, betrรคgt der typische Fehler in den ursprรผnglichen Einheiten ungefรคhr die Quadratwurzel aus 32.16, also etwa 5.7 Dollar.

Schritt 6) Machen Sie die Vorhersage

AbschlieรŸend kรถnnen Sie die TensorFlow-Methode `predict` verwenden, um den Wert von sechs Hรคusern in Boston zu schรคtzen.

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

Um die Schรคtzwerte auszugeben, kรถnnen Sie diesen Code verwenden:

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

Ausgang

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)]

Das Modell prognostiziert folgende Werte:

Einfamilienhaus Prognose
1 32.29
2 18.96
3 27.27
4 29.29
5 16.43
6 21.46

Beachten Sie, dass wir den wahren Wert dieser sechs Hรคuser nicht kennen. Im Deep-Learning-Tutorial werden Sie versuchen, das lineare Modell zu รผbertreffen.

NumPy-Lรถsung

Dieser Abschnitt erklรคrt, wie das Modell mithilfe eines NumPy-Estimators trainiert wird, um die Daten einzuspeisen. Die Methode ist dieselbe, nur dass Sie den numpy_input_fn-Estimator verwenden.

Lesen Sie dieselben drei CSV-Dateien, behalten Sie aber nur die rohen NumPy-Arrays mit .values โ€‹โ€‹bei.

training_set_n = pd.read_csv("E:/boston_train.csv").values
test_set_n = pd.read_csv("E:/boston_test.csv").values
prediction_set_n = pd.read_csv("E:/boston_predict.csv").values

Schritt 1) Importieren Sie die Daten

Zunรคchst mรผssen Sie die Merkmalsvariablen von den Zielvariablen unterscheiden. Dies ist sowohl fรผr die Trainingsdaten als auch fรผr die Evaluierungsdaten erforderlich. Es ist schneller, eine Funktion zur Datenaufteilung zu definieren.

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

Sie kรถnnen die Funktion verwenden, um die Beschriftung von den Merkmalen der Trainings- und Evaluierungsdatensรคtze zu trennen.

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

Sie mรผssen die letzte Spalte des Vorhersagedatensatzes ausschlieรŸen, da sie nur NaN-Werte enthรคlt.

x_predict = prediction_set_n[:, :-2]

รœberprรผfen Sie die Form des Arrays. Beachten Sie, dass die Beschriftung keine zweite Dimension haben sollte, also (400,).

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

Ausgang

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

Sie kรถnnen die Merkmalsspalten wie folgt konstruieren:

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

Der Schรคtzer wird wie zuvor definiert: Sie geben die Merkmalsspalten und den Speicherort fรผr das Diagramm an.

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

Ausgang

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}

Sie kรถnnen den NumPy-Estimator verwenden, um die Daten dem Modell zuzufรผhren und es anschlieรŸend zu trainieren. Beachten Sie, dass wir die Funktion `input_fn` zur besseren Lesbarkeit im Voraus definieren.

# Train the estimator
train_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)

Ausgang

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>

Sie wiederholen den gleichen Schritt mit einer anderen Eingabefunktion, um Ihr Modell zu evaluieren.

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)

Ausgang

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}

AbschlieรŸend kรถnnen Sie die Vorhersage berechnen. Sie sollte dem Ergebnis von Pandas รคhneln.

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)))

Ausgang

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-Lรถsung

Der letzte Abschnitt ist einem reinen TensorFlow Lรถsung. Diese Methode ist etwas komplizierter als die beiden anderen.

Beachten Sie, dass wenn Sie ein Jupyter NotizbuchUm diese Sitzung ausfรผhren zu kรถnnen, mรผssen Sie den Computer neu starten und den Kernel lรถschen.

TensorFlow bietet ein hervorragendes Tool zum รœbergeben von Daten an die Pipeline. In diesem Abschnitt erstellen Sie die Funktion `input_fn` selbst.

Schritt 1) Definieren Sie den Pfad und das Format der Daten

Zunรคchst deklarieren Sie zwei Variablen mit den Pfaden zu den CSV-Dateien. Beachten Sie, dass Sie zwei Dateien haben: eine fรผr den Trainingsdatensatz und eine fรผr den Testdatensatz.

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

AnschlieรŸend mรผssen Sie die Spalten aus der CSV-Datei auswรคhlen, die Sie verwenden mรถchten. Wir werden alle Spalten nutzen. Danach mรผssen Sie den Datentyp jeder Variablen festlegen.

Gleitkommazahlen werden durch [0.] definiert.

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]]

Schritt 2) Definieren Sie die Funktion input_fn

Die Funktion lรคsst sich in drei Teile unterteilen:

  1. Importieren Sie die Daten
  2. Erstellen Sie den Iterator
  3. Verbrauchen Sie die Daten

Nachfolgend finden Sie den vollstรคndigen Code zur Definition der Funktion. Der Code wird anschlieรŸend erlรคutert.

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

Importieren Sie die Daten

Die Methode `dataset` liest eine CSV-Datei zeilenweise ein. Um das Dataset zu erstellen, mรผssen Sie das Objekt verwenden. TextLineDatensatz. Ihr Datensatz enthรคlt eine Kopfzeile. Verwenden Sie daher `skip(1)`, um die erste Zeile zu รผberspringen. Lesen Sie nun nur noch die Daten und schlieรŸen Sie die Kopfzeile in der Datenverarbeitung aus. Um das Modell zu trainieren, mรผssen Sie die Merkmale von den Labels trennen. Die Methode `map` wird verwendet, um Transformationen auf die Daten anzuwenden.

Diese Methode ruft eine Funktion auf, die Sie erstellen mรผssen, um die Datentransformation festzulegen. Kurz gesagt, Sie mรผssen die Daten an die Funktion รผbergeben. TextLineEin Datensatzobjekt wird extrahiert, wobei die Kopfzeile entfernt und eine durch eine Funktion vorgegebene Transformation angewendet wird.

Code Erklรคrung

  • tf.data.TextLineDataset(data_file): Diese Zeile liest die CSV-Datei ein.
  • .skip(1): รœberspringt den Header
  • .map(parse_csv)): Parst die Datensรคtze in die Tensoren

Sie mรผssen eine Funktion definieren, die das Map-Objekt anweist. Diese Funktion kรถnnen Sie parse_csv nennen.

Diese Funktion parst die CSV-Datei mit der Methode `tf.decode_csv` und deklariert die Merkmale und die Bezeichnungen. Die Merkmale kรถnnen als Wรถrterbuch oder Tupel deklariert werden. Die Wรถrterbuchmethode ist praktischer.

Code Erklรคrung

  • tf.decode_csv(value, record_defaults= RECORDS_ALL): Die Methode decode_csv verwendet die Ausgabe von TextLineDatensatz zum Einlesen der CSV-Datei. `record_defaults` weist TensorFlow die Spaltentypen an. In TensorFlow 2.x befindet sich dieses Symbol unter `tf.io.decode_csv`.
  • dict(zip(COLUMNS, columns)): Fรผllt das Wรถrterbuch mit allen Spalten.tracted wรคhrend dieser Datenverarbeitung
  • features.pop('medv'): SchlieรŸt die Zielvariable aus den Merkmalsvariablen aus und erstellt eine Labelvariable.

Das Dataset benรถtigt weitere Elemente, um die Tensoren iterativ zu speisen. Sie mรผssen die Methode `repeat` hinzufรผgen, damit das Dataset das Modell kontinuierlich mit Daten versorgen kann. Ohne diese Methode wird das Modell nur einmal durchlaufen und anschlieรŸend einen Fehler ausgeben, da keine weiteren Daten mehr in die Pipeline gelangen.

AnschlieรŸend kรถnnen Sie die BatchgrรถรŸe mit der Batch-Methode steuern. Das bedeutet, dass Sie dem Datensatz mitteilen, wie viele Daten pro Iteration an die Pipeline รผbergeben werden sollen. Bei einer zu groรŸen BatchgrรถรŸe wird das Modell langsamer.

Schritt 3) Erstellen Sie den Iterator

Jetzt sind Sie bereit fรผr den zweiten Schritt: Erstellen Sie einen Iterator, um die Elemente im Datensatz zurรผckzugeben.

Der einfachste Weg, einen Operator zu erstellen, ist die Methode make_one_shot_iterator.

AnschlieรŸend kรถnnen Sie die Features und Beschriftungen aus dem Iterator erstellen.

Schritt 4) Verbrauchen Sie die Daten

Sie kรถnnen รผberprรผfen, was mit der Funktion `input_fn` passiert. Sie mรผssen die Funktion in einer Session aufrufen, um die Daten zu verarbeiten. Versuchen Sie es mit einer BatchgrรถรŸe von 1.

Beachten Sie, dass die Merkmale in einem Wรถrterbuch und die Bezeichnung als Array ausgegeben werden.

Es wird die erste Zeile der CSV-Datei angezeigt. Sie kรถnnen diesen Code mehrmals mit unterschiedlichen BatchgrรถรŸen ausfรผhren.

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)

Ausgang

({'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))

Schritt 5) Definieren Sie die Feature-Spalte

Sie mรผssen die numerischen Spalten wie folgt definieren:

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')

Beachten Sie, dass Sie alle Variablen in einem Bucket kombinieren mรผssen.

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

Schritt 6) Erstellen Sie das Modell

Sie kรถnnen das Modell mit dem Schรคtzer LinearRegressor trainieren.

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

Ausgang

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}

Sie benรถtigen ein Lambda-Funktion Damit Sie die Argumente fรผr die Funktion input_fn schreiben kรถnnen. Wenn Sie keine Lambda-Funktion verwenden, kรถnnen Sie das Modell nicht trainieren.

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

Ausgang

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>

Sie kรถnnen die Anpassung Ihres Modells an den Testsatz mit dem folgenden Code bewerten:

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]))

Ausgang

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

Im letzten Schritt wird der Zielwert anhand der Werte der Merkmalsmatrix vorhergesagt. Sie kรถnnen ein Wรถrterbuch mit den vorherzusagenden Werten erstellen. Ihr Modell hat neun Merkmale, daher mรผssen Sie fรผr jedes einen Wert angeben. Das Modell liefert dann fรผr jedes Merkmal eine Vorhersage.

Im folgenden Code schreiben Sie die Werte der einzelnen Merkmale, die in der df_predict CSV-Datei enthalten sind.

Sie mรผssen eine neue `input_fn`-Funktion schreiben, da im Datensatz keine Bezeichnungen vorhanden sind. Sie kรถnnen die `from_tensors`-API des Dataset-Objekts verwenden.

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_input
     pred_results = model.predict(input_fn=test_input_fn)

Zum Schluss drucken Sie die Vorhersagen aus.

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

Ausgang

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)})

Alle drei Pipelines liefern die gleichen sechs Vorhersagen, was bestรคtigt, dass die Wahl zwischen Pandas, NumPy und einem nativen TensorFlow-Datensatz eine Frage der Bequemlichkeit und nicht der Genauigkeit ist.

Hรคufig gestellte Fragen

Nein. TensorFlow hat Estimators und Feature-Spalten in Version 2.12 als vollstรคndig veraltet gekennzeichnet und in Version 2.16 entfernt. Um diesen Code unverรคndert auszufรผhren, verwenden Sie entweder TensorFlow 1.15 oder 2.15 oder schreiben Sie das Modell mit Keras-Layern neu, was das TensorFlow-Team nun empfiehlt.

Laden Sie die CSV-Dateien mit PandasDie neun Merkmale werden mithilfe einer Normalisierungsschicht skaliert und anschlieรŸend eine einzelne Dense(1)-Einheit hinzugefรผgt. Das Programm wird mit einem Optimierer und dem mittleren quadratischen Fehler als Verlustfunktion kompiliert und anschlieรŸend die Funktion `fit` aufgerufen. Eine Dense-Einheit ohne Aktivierungsfunktion entspricht einer linearen Regression.

Beginnen Sie mit etwa 0.01 und passen Sie den Wert in Zehnerschritten an. Ein zu kleiner Wert erfordert deutlich mehr Iterationen, um zu konvergieren, wรคhrend ein zu groรŸer Wert zu Schwankungen des Verlusts fรผhrt. Stellen Sie die Verlustkurve grafisch dar und behalten Sie den hรถchsten Wert bei, der noch einen gleichmรครŸigen Abfall ermรถglicht.

scikit-learn hat load_boston in Version 1.2 aufgrund ethischer Bedenken hinsichtlich einer kรผnstlich erzeugten ethnischen Variable entfernt. Dieses Tutorial liest einfache CSV-Dateien, daher funktioniert der Download-Link weiterhin. Fรผr neue Projekte sollten jedoch die Datensรคtze โ€žCalifornia Housingโ€œ oder โ€žAmes Housingโ€œ verwendet werden.

Der mittlere quadratische Fehler (RMSE) stellt die ursprรผnglichen Einheiten wieder her, der mittlere absolute Fehler (MAE) filtert AusreiรŸer heraus, und das BestimmtheitsmaรŸ (Rยฒ) gibt den Anteil der erklรคrten Varianz an. Geben Sie neben dem Rยฒ auch den absoluten Fehler an, da ein hohes Rยฒ dennoch groรŸe einzelne Vorhersagefehler verschleiern kann.

Die lineare Regression sagt eine kontinuierliche Zahl voraus, wie zum Beispiel einen Hauspreis. linearer Klassifikator sagt eine diskrete Klassenbezeichnung voraus. Beide Verfahren berechnen eine gewichtete Summe der Merkmale, aber der Klassifikator prรผft diese Summe anhand eines Entscheidungsschwellenwerts.

Automatisierte Pipelines bewerten Merkmale mithilfe von Lasso-Regularisierung, gegenseitiger Information oder Permutationswichtigkeit und entfernen anschlieรŸend die schwรคchsten. AutoML-Tools durchsuchen Vorverarbeitungs- und Modelloptionen gemeinsam, sodass Sie weniger Zeit mit der manuellen Auswahl der Spalten fรผr `feature_cols` verbringen mรผssen.

Copilot generiert schnell Standardcode, darunter Eingabefunktionen, Merkmalsspaltenlisten und Auswertungsschleifen. Behandeln Sie jeden Vorschlag als Entwurf, da hรคufig veraltete Estimator-Aufrufe verwendet werden. รœberprรผfen Sie jedes generierte Symbol anhand der aktuellen TensorFlow-API, bevor Sie es ausfรผhren.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: