Was ist neuronales Netzwerklernen? Die Trainingsdaten werden verwendet, um die Kombination von Fragen (Eingabe / Daten) und Antworten (Ausgabe / Etikett) zu lernen. Und wenn Sie Testdaten als Eingabe für dieses trainierte Netzwerk verwenden, Durch Analyse der erhaltenen Ausgabe kann die Leistung des neuronalen Netzwerks gemessen werden.
Python-Umgebung in VScode unter Verwendung der Basis von Anaconda. Ich möchte darüber in einem anderen Artikel sprechen.
Es ist einfacher zu verstehen, wenn Sie anhand von Anwendungsbeispielen lernen. Wir würden uns freuen, wenn Sie sich die Programmkommentare genauer ansehen könnten.
・ Wie man MNIST durch allgemeines maschinelles Lernen trainiert (nicht CNN, RNN, LSTM)
mnist.py
#Importieren Sie die MNIST-Bibliothek.
from keras.datasets import mnist
from keras import models
from keras import layers
from keras import optimizers
from keras import regularizers
from keras import utils
#Trainingsdaten(50.000 Stück)Und Testdaten(10000 Stück)Bereiten.
#Dieses Mal wird die Holdout-Methode als Bewertung verwendet.
#Wenn die Daten klein sind, müssen die Überprüfung der k-Teilungskreuzung und die zufällige Überprüfung der k-Teilungsschnittstelle berücksichtigt werden.
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
print(train_images.shape)
print(len(train_labels))
print(train_labels)
print(test_images.shape)
print(len(test_labels))
print(test_labels)
#Erstellen Sie ein Modell eines linearen Stapels.
network = models.Sequential()
#Dicht bezieht sich auf eine eng gekoppelte Schicht.
# add()Sie können Ebenen mit hinzufügen.
#Einheiten ist die Anzahl der Zellen.
# kernel_Der Regularizer verhindert Überlernen, indem er die Netzwerkgewichtswerte regelmäßig macht.
# kernel_Sowohl die L1-Regularisierung als auch die L2-Regularisierung werden auf den Regularisierer angewendet, es kann jedoch entweder eine verwendet werden oder nicht.
#Aktivierung ist eine Art Aktivierungsfunktion
# input_Form ist Arrays von Form(*, 28*28).. Formal schwer zu verstehen.
#Durch Dropout wird ein Teil der Daten, der sich von der unmittelbar vorhergehenden Schicht zur unmittelbar folgenden Schicht ausbreitet, auf 0 gesetzt.
#Überlernen kann durch absichtliches Hinzufügen von Rauschen verhindert werden. Grundsätzlich wird es in die mittlere Schicht gelegt, aber es ist nicht notwendig.
network.add(layers.Dense(units=512,
kernel_regularizer=regularizers.l1_l2(l1=0.001, l2=0.001),
activation='relu',
input_shape=(28 * 28, ))) #Vollständig verbundene Schicht
network.add(layers.Dropout(0.25)) #Dropout-Ebene
network.add(layers.Dense(units=10,
activation='softmax')) #Softmax-Schicht
#Sie müssen kompilieren, um sich auf das Training Ihres Netzwerks vorzubereiten.
#Die Zielfunktion kann mit Verlust eingestellt werden, diesmal der Kreuzentropiefehler.
#Sie können die Lernmethode mit einem Optimierer wie SGD, Momentum SGD, AdaGrad, RMSprop einstellen.
# metrics=['accuracy']Mittel zur Berechnung der richtigen Antwortrate.
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
#Verarbeiten Sie MNIST-Daten vor dem Training vor.
#Der Wert des Tensors ist 0, da er viel Berechnung erfordert.~Es ist notwendig, solche Dinge wie zwischen 1 zu setzen.
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28 * 28))
test_images = test_images.astype('float32') / 255
print(train_images.shape)
print(train_images)
print(test_images.shape)
print(test_images)
#Ausgabe(Etikette)Ist die Zahl "0",1,2,3,~,Da es in "9" unterteilt ist, muss es mit einem Kategoriewert codiert werden.
# [1, 0, 0, 0, 0, 0, 0, 0, 0]…0
# [0, 0, 1, 0, 0, 0, 0, 0, 0]…2
# [0, 0, 0, 0, 0, 1, 0, 0, 0]…6
#Wie 0,1 steht für eine Zahl.
train_labels = utils.to_categorical(train_labels)
test_labels = utils.to_categorical(test_labels)
#Nachdem wir nun bereit sind, das Netzwerk zu trainieren, rufen wir die Anpassungsmethode auf, um das Modell an die Trainingsdaten anzupassen.
#Geben Sie die Eingabe- und Ausgabedaten für die Trainingsdaten in die Argumente ein.
#Epochen gibt an, wie oft die gesamten Daten verwendet werden. Es wird angezeigt, wie oft alle Daten gleich verwendet werden, und es kommt zu Überlernen, wenn zu viele Daten verwendet werden.
# batch_Größe gibt an, wie viele Unterteilungen die für das Training verwendeten Eingabedaten aufgeteilt werden sollen.
#Diesmal sind es 50.000 Daten, also 50.000 ÷ 100=Bei 500,"1"Lernen Sie mit 500 Daten 100 Mal pro Epoche. Ich kenne den detaillierten Grund nicht.
network.fit(train_images, train_labels, epochs=10, batch_size=100)
#Sofort geschultes Netzwerk(network)Verwenden von,
#Verlustwert in Testdaten(loss)Und richtige Antwortrate(accuracy)Fragen.
#Geben Sie die Eingabe- und Ausgabedaten der Testdaten in das Argument ein.
test_loss, test_acc = network.evaluate(test_images, test_labels)
print('test_acc:', test_acc)
#Ergebnis ist "# test_acc: 0.9795 ", aber der Wert variiert je nach Umgebung.
#Der Grund dafür ist, dass Keras beim Initialisieren des Netzwerks zufällig einen Startwert auswählt.
・ Wie trainiere ich MNIST mit LSTM?
mnist_1.py
Recommended Posts