[Deep Learning Notes] TensorFlow-Grundlagen

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

1 tf.Tensor

2 tf.Variable

3 tf.GradientTape


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

おすすめ

転載: blog.csdn.net/sxyang2018/article/details/132153893