In TensorFlow 2.0 und späteren Versionen wird standardmäßig die Eager Execution-Methode übernommen, und die Sitzung von Version 1.0 wird nicht mehr zum Erstellen von Sitzungen verwendet. Eager Execution verwendet eine natürlichere Methode zum Organisieren von Code, ohne ein Berechnungsdiagramm zu erstellen, und kann mathematische Berechnungen sofort durchführen, was den Code-Debugging-Prozess vereinfacht. In diesem Artikel wird hauptsächlich die grundlegende Verwendung von TensorFlow vorgestellt und der Prozess der Optimierung der Verlustfunktion durch TensorFlow durch die Erstellung einer einfachen Verlustfunktion vorgestellt.
Inhaltsverzeichnis
TensorFlow ist eine End-to-End-Plattform für maschinelles Lernen. Es unterstützt Folgendes:
- Numerische Berechnungen basierend auf mehrdimensionalen Arrays (ähnlich wie NumPy)
- GPUs und verteilte Verarbeitung
- automatische Differenzierung
- Modellbau, Schulung und Export
1 tf.Tensor
TensorFlow verwendet tf.Tensor-Objekte, um mehrdimensionale Arrays (oder Tensoren) zu verarbeiten. Das Folgende ist ein Beispiel für einen 2D-Tensor:
import tensorflow as tf
x = tf.constant([[1., 2., 3.],
[4., 5., 6.]])
print(x)
tf.Tensor(
[[1. 2. 3.]
[4. 5. 6.]], shape=(2, 3), dtype=float32)
Die wichtigsten Attribute eines tf.Tensor-Objekts sind Form und dtype:
- Tensor.shape gibt die Größe jeder Dimension des Tensors zurück
- Tensor.dtype gibt den Datentyp der Elemente im Tensor zurück
print(x.shape)
(2, 3)
print(x.dtype)
<dtype: 'float32'>
TensorFlow implementiert standardmäßige mathematische Operationen für Tensoren, umfasst aber auch für maschinelles Lernen angepasste Operationen. Hier sind einige Beispiele:
x + x
5 * x
tf.transpose(x)
tf.nn.softmax(x, axis=-1)
tf.reduce_sum(x)
2 tf.Variable
In TensorFlow werden die Gewichte eines Modells mit tf.Variable-Objekten, sogenannten Variablen, gespeichert.
import tensorflow as tf
x = tf.Variable([0., 0., 0.])
x.assign([1, 2, 3])
<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32,
numpy=array([1., 2., 3.], dtype=float32)>
Der Wert des tf.Variable-Objekts kann geändert werden. In TensorFlow 2.0 wird die Sitzung nicht mehr zum Starten der Berechnung verwendet, und die Variable kann das Ergebnis direkt berechnen.
x.assign_add([1, 1, 1,])
<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32,
numpy=array([2., 3., 4.], dtype=float32)>
x.assign_sub([1, 1, 1])
<tf.Variable 'UnreadVariable' shape=(3,) dtype=float32,
numpy=array([1., 2., 3.], dtype=float32)>
3 tf.GradientTape
Die Gradientenabstiegsmethode und verwandte Algorithmen bilden heute die Grundlage des maschinellen Lernens. TensorFLow implementiert die automatische Differenzierung zur Berechnung von Gradienten, die typischerweise zur Berechnung von Gradienten von Verlustfunktionen für Modelle des maschinellen Lernens verwendet wird.
TensorFlow 2.0 stellt das tf.GradientTape-Objekt bereit, das als „Gradientenfluss“ verstanden werden kann. Wie der Name schon sagt, wird tf.GradientTape zur Berechnung des Gradienten verwendet.
Hier ist ein einfaches Beispiel:
import tensorflow as tf
def f(x):
return x**2 + 2*x - 5
x = tf.Variable(1.0)
with tf.GradientTape() as tape:
y = f(x)
g_x = tape.gradient(y, x) # 计算 y 在 x = 1.0 处的梯度
print(g_x)
4,0
Erstellen Sie abschließend eine einfache Verlustfunktion und berechnen Sie mit TensorFlow das Minimum.
import tensorflow as tf
def loss(x):
return x**2 - 10*x + 25
x = tf.Variable(1.0) # 随机初始值
losses = [] # 记录损失函数值
for i in range(100):
with tf.GradientTape() as tape:
one_loss = loss(x)
lossed.append(one_loss)
grad = tape.gradient(one_loss, x)
x.assign_sub(0.1 * grad) # 执行一次梯度下降法
print("The mininum of loss function is: ")
tf.print(x)
Die Minimum-of-Loss-Funktion ist:
4.99999905
# 可视化优化过程
import matplotlib
from matplotlib import pyplot as plt
matplotlib.rcParams['figure.figsize'] = [8, 5]
plt.figure()
plt.plot(losses)
plt.title('Loss vs training iterations')
plt.xlabel('iterations')
plt.ylabel('loss')