[PYTHON] Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"

Was zu tun ist: point_up:

Lesen Sie Tensorflow 2.0 Tutorial. Ich möchte untersuchen und ergänzen, was ich im Tutorial als Memorandum nicht verstanden habe. Es kann also gut sein, es neben dem Tutorial zu lesen.

Hintergrund

Ich habe bis jetzt Ketten verwendet Als ich Tensorflow lernen wollte, war der Mainstream auf 2.0 übergegangen, bevor ich es wusste. Ich kenne das Tensorflow1-System nicht einmal, aber wenn ich es jetzt mache, halte ich es für sinnvoll, mit dem 2. System zu beginnen, also habe ich angefangen, das Tensorflow2-Tutorial zu lesen.

Umgebung

windows10 Ich habe es in der virtuellen Umgebung von Anaconda gemacht Die Umgebungskonstruktion ist wie folgt

#python3.Es scheint, dass es nur bis zu 6 unterstützt, also ist die Version 3.6
conda create -n tensorflow2.0 python=3.6 anaconda
conda install tensorflow==2.0.0
conda install jupyter

from __future__ import absolute_import, division, print_function, unicode_literals

!pip install -q tensorflow-gpu==2.0.0-rc1
import tensorflow as tf

from tensorflow.keras.layers import Dense, Flatten, Conv2D
from tensorflow.keras import Model
mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()

#~~
x_train, x_test = x_train / 255.0, x_test / 255.0

# tf.Importieren Sie zunächst die TensorFlow-Bibliothek in Ihr Programm. Laden Sie den MNIST-Datensatz und bereiten Sie ihn vor. Es scheint, dass die Anzahl der Dimensionen mit einer neuen Achse herausgenommen werden kann, die den Pixelwert (0255) auf 01 drückt
#Fügen Sie allen Daten (jedem Bild) Informationen zur Dimensionsnummer hinzu.
#CNN scheint dimensionale Informationen zu benötigen. Dies kann ein Prozess sein, der bei vollständiger Verknüpfung nicht umgekehrt ausgeführt werden sollte
x_train = x_train[..., tf.newaxis]
x_test = x_test[..., tf.newaxis]

Verwenden Sie tf.data, um Datasets zu mischen und zu stapeln.

#10000 ist die Puffergröße. Reichen 10.000 für CNN aus? ??
#32 ist die Chargengröße.
train_ds = tf.data.Dataset.from_tensor_slices(
    (x_train, y_train)).shuffle(10000).batch(32)
test_ds = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)

Erstellen Sie ein tf.keras-Modell mit der Keras-Modell-Unterklassen-API.

#Vererbung der Modellklasse
class MyModel(Model):
#Erstellen Sie ein Modell mit init
  def __init__(self):
    super(MyModel, self).__init__()
#32 Filtertypen
#Die Filtergröße beträgt 3*3
#Die Aktivierungsfunktion ist Relu
    self.conv1 = Conv2D(32, 3, activation='relu')
#Zweidimensionale Daten*Reduzieren Sie die Anzahl der Filterdaten auf eine Dimension
    self.flatten = Flatten()
    self.d1 = Dense(128, activation='relu')
#Da es sich um eine Ausgabeschicht handelt, ist die Aktivierungsfunktion eine Softmax-Funktion
    self.d2 = Dense(10, activation='softmax')

#Ist x die Eingabebildgruppe? ??
# -> tf.Es scheinen Tensortypdaten zu sein.
  def call(self, x):
    x = self.conv1(x)
    x = self.flatten(x)
    x = self.d1(x)
#Spucken Sie das von NN berechnete Ergebnis aus? ??
    return self.d2(x)

model = MyModel()

Wählen Sie einen Optimierer und eine Verlustfunktion für das Training.

#Stabiler Kreuzentropiefehler
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
#Es wird gemunkelt, dass ADAM jetzt (vor langer Zeit?) Der Beste ist.
optimizer = tf.keras.optimizers.Adam()

Wählen Sie Metriken aus, um den Modellverlust und die Genauigkeit zu messen. Diese Metriken aggregieren die Werte für jede Epoche und geben das Endergebnis aus.

#Instanz, die die Matrix mittelt
train_loss = tf.keras.metrics.Mean(name='train_loss')
#Instanz, die die richtige Antwortrate angibt
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='train_accuracy')

test_loss = tf.keras.metrics.Mean(name='test_loss')
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy(name='test_accuracy')

Trainieren Sie Ihr Modell mit tf.GradientTape.

@tf.function
def train_step(image, label):
#Mit internen Berechnungen aufzeichnen. Band.~~Ich nehme es raus
  with tf.GradientTape() as tape:
#Vorhersage basierend auf Bild, Verlustberechnung
    predictions = model(image)
    loss = loss_object(label, predictions)
# model.trainable_Übergeben Sie Gewichte mit Variablen
  gradients = tape.gradient(loss, model.trainable_variables)
#Aktualisieren Sie die Gewichte mit dem Optimierer
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

#Berechnen Sie den Verlust und die Akkreditierung mit der vorherigen Instanz
  train_loss(loss)
  train_accuracy(label, predictions)

Referenz: Einführung in TensorFlow 2.0 für Low-Level-API-Benutzer

Über @ tf.function Es gibt zwei Möglichkeiten, den NN zu drehen. Definieren und ausführen: Definieren Sie das Berechnungsdiagramm und führen Sie dann die Daten aus, um das Ergebnis zu erhalten. Define-by-Run: Wie der normale Python-Code wird das Diagramm gleichzeitig mit der Definition des Diagramms mit x + y ausgeführt und das Ergebnis erhalten (Quelle). ))) Es scheint, dass Tensorflow 2.0.0 "by" verwendet, weil "by" einfacher zu schreiben ist. 'By' ist jedoch sehr langsam, so dass das Hinzufügen von '@ tf.function' den gleichen Vorgang wie 'and' zu ermöglichen scheint. Weitere Informationen finden Sie im Bestätigungsartikel (https://qiita.com/nj_ryoo0/items/7f4495aaef07ccc6a303).

Dann testen Sie das Modell.

@tf.function
def test_step(image, label):
  predictions = model(image)
  t_loss = loss_object(label, predictions)

  test_loss(t_loss)
  test_accuracy(label, predictions)
EPOCHS = 5

for epoch in range(EPOCHS):
#Führen Sie den Zug auf allen Bildern für jede Charge
  for image, label in train_ds:
    train_step(image, label)

#Führen Sie für jeden Stapel Tests für alle Bilder durch
  for test_image, test_label in test_ds:
    test_step(test_image, test_label)

#Verschiedene Anzeigen
  template = 'Epoch {}, Loss: {}, Accuracy: {}, Test Loss: {}, Test Accuracy: {}'
  print (template.format(epoch+1,
                         train_loss.result(),
                         train_accuracy.result()*100,
                         test_loss.result(),
                         test_accuracy.result()*100))

Ergebnis

WARNING:tensorflow:Layer my_model is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because it's dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.

Epoch 1, Loss: 0.14364087581634521, Accuracy: 95.62000274658203, Test Loss: 0.06367728859186172, Test Accuracy: 97.88999938964844
Epoch 2, Loss: 0.09373863786458969, Accuracy: 97.1483383178711, Test Loss: 0.056961096823215485, Test Accuracy: 98.07500457763672
Epoch 3, Loss: 0.07041392475366592, Accuracy: 97.84444427490234, Test Loss: 0.05455232039093971, Test Accuracy: 98.17666625976562
Epoch 4, Loss: 0.05662970244884491, Accuracy: 98.25749969482422, Test Loss: 0.05664524435997009, Test Accuracy: 98.19499969482422
Epoch 5, Loss: 0.047065384685993195, Accuracy: 98.54966735839844, Test Loss: 0.057572390884160995, Test Accuracy: 98.23799896240234

P.S. @```Es war bequem, sich im Wörterbuch mit zu registrieren

Recommended Posts

Anfänger lesen "Einführung in TensorFlow 2.0 für Experten"
[Erklärung für Anfänger] Einführung in die Faltverarbeitung (erklärt in TensorFlow)
Memo Nr. 4, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Eine Einführung in die objektorientierte Programmierung für Anfänger von Anfängern
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Einführung in die Programmierung (Python) TA Tendenz für Anfänger
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
Memo Nr. 5, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Für Anfänger] Einführung in die Vektorisierung beim maschinellen Lernen
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Einführung in Python For, While
TensorFlow-Lernmethode für Profis der freien Künste und Python-Anfänger
[Python] Einführung in die Diagrammerstellung mit Corona-Virendaten [Für Anfänger]
TensorFlow MNIST Für ML Anfänger Übersetzung
Erste Schritte mit Python für Nicht-Ingenieure
TensorFlow Tutorial -MNIST Für ML-Anfänger
TensorFlow Deep MNIST für Expertenübersetzung
[Erklärung für Anfänger] TensorFlow-Tutorial Deep MNIST
Eine Einführung in OpenCV für maschinelles Lernen
Wahrscheinlich die einfachste Einführung in TensorFlow
Einführung in discord.py (1. Tag) -Preparation for discord.py-
Ergänzende Hinweise zu TensorFlow MNIST für ML-Anfänger
[Python] Bilder mit OpenCV lesen (für Anfänger)
Eine Einführung in Python für maschinelles Lernen
Eine Einführung in Python für C-Sprachprogrammierer
[Für Anfänger] Super Einführung in neuronale Netze, die selbst Katzen verstehen können
Einführung in die Graph Database Neo4j in Python für Anfänger (für Mac OS X)
Einführung in Deep Learning (1) --Chainer wird Anfängern leicht verständlich erklärt.
Einführung in MQTT (Einführung)
Einführung in Scrapy (1)
[Erklärung für Anfänger] Grundlegende Syntax und Konzept von TensorFlow
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Für Anfänger, um eine Anaconda-Umgebung aufzubauen. (Memo)
Einführung in Tkinter 1: Einführung
So erstellen Sie ein Spigot-Plug-In (für Java-Anfänger)
Python für Super-Anfänger Super-Anfänger Python # Einfach loszuwerden
Einführung in PyQt
Einführung in Scrapy (2)
Eine Einführung in die statistische Modellierung für die Datenanalyse
Verwendung von Datenanalysetools für Anfänger
[Einführung in TensorBoard] Visualisieren Sie die TensorFlow-Verarbeitung, um das Verständnis zu vertiefen
Versuchen Sie, RPN mit Python zu berechnen (für Anfänger)
[Linux] Einführung in Linux
[Einführung in die Udemy Python3 + -Anwendung] 43. for else-Anweisung
Einführung in Scrapy (4)
Einführung in discord.py (2)
Durchführen des TensorFlow MNIST für ML-Anfänger-Tutorials
Tensorufuro, Tensafuro Immerhin welches (wie man Tensorflow liest)
Eine Einführung in die Sprachanalyse für Musik-Apps
Installieren von TensorFlow unter Windows Easy für Python-Anfänger
Wie man Python für Anfänger schneller macht [numpy]
[Für Anfänger] Wie man Programmierung studiert Private Memo
[Einführung für Anfänger] Umgang mit MySQL mit Python
So erzwingen Sie, dass TensorFlow 2.3.0 für CUDA11 + cuDNN8 erstellt wird
Grundlegendes zur Python for Pepper-Entwicklung. -Einführung in Python Box-