AI-United » Allgemein » TensorFlow

TensorFlow

TensorFlow

Dies ist der erste Artikel in der Artikelserie, in der ich TensorFlow vorstellen und tief in die unzähligen Bibliotheken für Mathematik und maschinelles Lernen eintauchen werde. Zunächst möchte ich in diesem Artikel die Idee des TensorFlow-Frameworks, die Struktur, die Schlüsselkomponenten usw. beschreiben. Am Ende dieses Artikels können Sie einfache Code-Snippets für numerische Löser in TensorFlow schreiben.

Für diejenigen, die es nicht kennen,

TensorFlow ist ein Berechnungsrahmen für die Erstellung von Machine Learning-Modellen. Es ist das System der zweiten Generation von Google Brain, das von Jeff Dean geleitet wird. Es wurde Anfang 2017 eingeführt und hat die ML-Welt gestört, indem es zahlreiche Funktionen von der Skalierbarkeit bis hin zum Erstellen von Serienmodellen einführte.

TensorFlow-Toolkit-Hierarchie

TensorFlow bietet eine Vielzahl verschiedener Toolkits an, mit denen Sie einen Code auf Ihrer bevorzugten Abstraktionsebene schreiben können. Sie können beispielsweise einen Code in Core TensorFlow (C++) schreiben und diese Methode aus Python-Code aufrufen. Sie können auch die Architektur definieren, auf der Ihr Code ausgeführt werden soll (CPU, GPU usw.). In der vorgenannten Hierarchie ist C++ oder Python die unterste Ebene, in der Sie Ihren Code schreiben können. Mit diesen beiden Ebenen können Sie numerische Programme schreiben, um mathematische Operationen und Gleichungen zu lösen. Obwohl dies für die Erstellung von Machine Learning-Modellen nicht unbedingt empfohlen wird, bietet es eine Vielzahl von Mathematikbibliotheken, die Ihre Aufgaben erleichtern. Die nächste Stufe, in der Sie Ihren Code schreiben können, ist die Verwendung der TF-spezifischen abstrakten Methoden, die für Modellkomponenten stark optimiert sind. Mit der abstrakten Methode tf.layers können Sie beispielsweise mit den Schichten eines neuronalen Netzes spielen. Sie können ein Modell erstellen und die Modellleistung mithilfe der Methode tf.metrics bewerten. Das am häufigsten verwendete Level ist die tf.estimator-API, mit der Sie produktionsbereite Modelle auf einfache Weise erstellen (trainieren und vorhersagen) können. Die Estimator-API ist einfach zu bedienen und gut optimiert. Sie bietet zwar weniger Flexibilität, verfügt jedoch über alles, was Sie zum Trainieren und Testen Ihres Modells benötigen. Sehen wir uns eine Anwendung der Estimator-API zum Erstellen eines Klassifizierers mit nur drei Codezeilen an.

import tensorflow as tf

# Set up a linear classifier.
classifier = tf.estimator.LinearClassifier(feature_columns)

# Train the model on some sample data.
classifier.train(input_fn=train_input_function, steps=2000)

# Use it to predict.
predictions = classifier.predict(input_fn=predict_input_function)

In diesem Artikel werde ich den Core TensorFlow (Python) verwenden, um einen Code zu schreiben. Bevor ich jedoch damit beginne, möchte ich über die verfügbaren Datentypen in TensorFlow sprechen.

Datentypen

Der grundlegende Datentyp in diesem Framework ist ein Tensor. Ein Tensor ist ein N-dimensionales Datenfeld. Sie können beispielsweise einen Skalar (einen konstanten Wert wie Integer 2) als 0-Maß-Tensor aufrufen. Ein Vektor ist ein 1-dimensionaler Tensor und eine Matrix ist ein 2-dimensionaler Tensor. Die folgende Grafik beschreibt jede der Abmessungen eines Tensors im Detail.

Tensor-Datentyp

Beachten Sie die vorstehende Grafik. Die Variable x ist der deklarierte Tensor, der die Klasse tf.constant verwendet.

Konstanten: Eine Konstante ist ein Tensor, dessen Wert überhaupt nicht geändert werden kann. Im ersten Beispiel nimmt x einen konstanten Wert 3 an und daher ist die Form Keine. Sie können beliebige dimensionale Tensoren deklarieren, indem Sie die Tensoren mithilfe der Funktion tf.stack auf einen vorhandenen Tensor stapeln. Dies ist aus dem Beispiel für den nD Tensor ersichtlich.

Nun, da wir gesehen haben, wie man Konstanten in TensorFlow deklariert, betrachten wir jetzt das Deklarieren von Variablen.

Variablen: Eine Variable ist ein Tensor, dessen Wert initialisiert wird und sich normalerweise ändert, wenn das Programm ausgeführt wird. In TensorFlow werden Variablen von der Klasse tf.Variable manipuliert. Die beste Methode zum Erstellen einer Variablen ist der Aufruf der Funktion tf.get_variable. Für diese Funktion müssen Sie den Namen der Variablen angeben. Dieser Name wird von anderen Replikaten verwendet, um auf dieselbe Variable zuzugreifen und um den Wert dieser Variablen zu benennen, wenn Sie das Zeigen und Exportieren von Modellen überprüfen. Mit tf.get_variable können Sie auch eine zuvor erstellte Variable mit demselben Namen wiederverwenden, sodass Sie Modelle definieren können, die Layer wiederverwenden.

my_variable = tf.get_variable("my_variable", [1, 2, 3])

Initialisieren von Variablen: Da der Core Tensorflow, eine API auf niedriger Ebene verwendet, müssen die Variablen explizit initialisiert werden. Wenn ein High-Level-Framework wie tf.Estimator oder Keras verwendet wird, werden die Variablen automatisch für Sie initialisiert. Um die Variablen zu initialisieren, muss der tf.global_variables_initializer aufgerufen werden. Sie können alle Variablen in einer Sitzung mit der folgenden Codezeile initialisieren.

session.run(tf.global_variables_initializer())

Aber was ist session.run? Was sind Sitzungen?

Sitzungen und Grafiken

Eine Sitzung kapselt den Status der TensorFlow-Laufzeit und führt TensorFlow-Vorgänge aus. Jede Codezeile, die Sie mit TensorFlow schreiben, wird durch einen zugrunde liegenden Graphen dargestellt. Lassen Sie uns diesanhand eines Beispiels näher betrachten.

session = tf.Session()
x = tf.constant([1, 2, 3], name = "x")
y = tf.constant([4, 5, 6], name = "y")
z1 = tf.add(x, y, name = "z1")
z2 = x * y
z3 = z2- z1

Ich habe zwei 1D-Tensoren x und y erstellt. Ich habe sie hinzugefügt und in einer Variablen namens z1 gespeichert. Ich habe sie multipliziert und in einer Variablen z2 gespeichert. Ich habe eine andere Variable z3 erstellt, indem ich z1 von z2 abgezogen habe. Wenn dieses spezielle Code-Snippet ausgeführt wird, berechnet TensorFlow die Ergebnisse nicht, sondern erstellt eine Grafik (siehe unten), die den vorgenannten Code darstellt.

TensorFlow-Diagramm

Die Idee hinter der Verwendung von Diagrammen besteht darin, einen tragbaren Code zu erstellen. Ja, dieser Graph kann von jeder beliebigen Architektur exportiert und verwendet werden. Aber warum berechnet TensorFlow die Ergebnisse nicht? Weil es dem faulen Bewertungsparadigma folgt. Alle erstellten Diagramme sind an eine Sitzung gebunden, und TensorFlow muss aufgefordert werden, die Ergebnisse mit session.run zu berechnen.

session.run(z3)

Denken Sie daran: Wenn eine tf.Graph wie eine .py-Datei ist, ist eine tf.Session wie die ausführbare Python-Datei.

Nachdem wir nun die Grundlagen von Sitzungen, Diagrammen, Datentypen und der Erstellung von Variablen kennen, können Sie die Sache angehen und einen TensorFlow-Code schreiben.

TensorFlow-Code

Addition und Subtraktion
import tensorflow as tf

a1 = tf.constant([1, 2, 3])
a2 = tf.constant([3, 4, 5])
a3 = a1 + a2 # (tf.add(a1, a2) also works. TensorFlow supports primitive operators)

with tf.Session() as session:
  session.run(a3)
  
# Result
[4, 6, 8]

a4 = a1 - a2
with tf.Session() as session:
  session.run(a4)
  
# Result
[-2, -2, -2]
Multiplikation und Division
import tensorflow as tf

a1 = tf.constant([1, 2, 3])
a2 = tf.constant([3, 4, 5])
a3 = a1 * a2 # (tf.mul(a1, a2) also works. TensorFlow supports primitive operators)

with tf.Session() as session:
  session.run(a3)
  
# Result
[3, 8, 15]

a4 = a1/a2
with tf.Session() as session:
  a4.eval()  # eval() can be used instead of session.run() to compute the results of a particular variable.
  
# Result
[0.34, 0.5, 0.6]
Umformung
import tensorflow as tf

a1 = tf.constant([3, 5, 7],
                 [4, 6, 8])  # Shape is (2, 3)
a2 = tf.reshape(a1, [3, 2])

with tf.Session() as sess:
  sess.run(a2)
  print(a2)
  
# Result
[[3, 5],
 [7, 4],
 [6, 8]]

Ich habe einen quadratischen Gleichungslöser geschrieben, der nur die oben beschriebenen einfachen Operationen verwendet hat, und der Code dafür ist in meinem GitHub-Repository verfügbar.

Fazit

Meistens wird TensorFlow als Backend-Framework verwendet, dessen Module über die Keras-API aufgerufen werden. In der Regel wird TensorFlow eingesetzt, um komplexe Probleme wie Bildklassifizierung, Objekterkennung, Tonerkennung usw. zu lösen. In diesem Artikel haben wir die Struktur und die Komponenten von TensorFlow kennengelernt.

Quelle

AI-United-Redaktion

Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.