[PYTHON] Ich habe versucht, mit TF Learn die logische Operation zu lernen

Hinweise zur Verwendung von TensorFlow unter Bash unter Ubuntu unter Windows Ich kann also TensorFlow verwenden, weiß aber nicht, wie ich es verwenden soll.

Es gibt eine Bibliothek namens TFLearn, die die Verwendung von TensorFlow erleichtert, daher habe ich diese ebenfalls aufgenommen.

$ pip install tflearn

Beim Betrachten des Beispielcodes gab es ein Programm namens logisch.py, das logische Operationen zu lernen scheint, also habe ich es dieses Mal versucht.

Lernen ODER

Da logisch.py eine Sammlung des Lernens mehrerer logischer Operationen ist, habe ich versucht, nur die relevanten Teile zu extrahieren.

import tensorflow as tf
import tflearn

# Logical OR operator
X = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
Y = [[0.], [1.], [1.], [1.]]

# Graph definition
with tf.Graph().as_default():
    g = tflearn.input_data(shape=[None, 2])
    g = tflearn.fully_connected(g, 128, activation='linear')
    g = tflearn.fully_connected(g, 128, activation='linear')
    g = tflearn.fully_connected(g, 1, activation='sigmoid')
    g = tflearn.regression(g, optimizer='sgd', learning_rate=2.,
                           loss='mean_square')

    # Model training
    m = tflearn.DNN(g)
    m.fit(X, Y, n_epoch=100, snapshot_epoch=False)

    # Test model
    print("Testing OR operator")
    print("0 or 0:", m.predict([[0., 0.]]))
    print("0 or 1:", m.predict([[0., 1.]]))
    print("1 or 0:", m.predict([[1., 0.]]))
    print("1 or 1:", m.predict([[1., 1.]]))

Es ist mein erster Blick, aber irgendwie verstehe ich die Bedeutung. Als dies getan wurde, war das Ergebnis wie folgt.

--
Training Step: 100  | total loss: 0.00227
| SGD | epoch: 100 | loss: 0.00227 -- iter: 4/4

--
Testing OR operator
0 or 0: [[0.031054211780428886]]
0 or 1: [[0.9823662638664246]]
1 or 0: [[0.9786670207977295]]
1 or 1: [[0.9999874830245972]]

Wenn Sie es digital als 0 oder 1 betrachten, haben Sie OR gelernt.

Übrigens sind im ersten Code 128 Zwischenschichten durch zwei Schichten verbunden. Ich habe versucht, die mittlere Ebene zu löschen, weil ich die mittlere Ebene nicht wie Lernen ODER brauche. Stattdessen habe ich die Anzahl der Lernvorgänge auf 2000 erhöht.

import tensorflow as tf
import tflearn

# Logical OR operator
X = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
Y = [[0.], [1.], [1.], [1.]]

# Graph definition
with tf.Graph().as_default():
    g = tflearn.input_data(shape=[None, 2])
    g = tflearn.fully_connected(g, 1, activation='sigmoid')
    g = tflearn.regression(g, optimizer='sgd', learning_rate=2., loss='mean_square')

    # Model training
    m = tflearn.DNN(g)
    m.fit(X, Y, n_epoch=2000, snapshot_epoch=False)

    # Test model
    print("Testing OR operator")
    print("0 or 0:", m.predict([[0., 0.]]))
    print("0 or 1:", m.predict([[0., 1.]]))
    print("1 or 0:", m.predict([[1., 0.]]))
    print("1 or 1:", m.predict([[1., 1.]]))

Das Ergebnis davon.

--
Training Step: 2000  | total loss: 0.00098
| SGD | epoch: 2000 | loss: 0.00098 -- iter: 4/4
--
Testing OR operator
0 or 0: [[0.041201911866664886]]
0 or 1: [[0.9756871461868286]]
1 or 0: [[0.9764388799667358]]
1 or 1: [[0.9999741315841675]]

Es scheint, dass ich ODER richtig lernen konnte.

Lernen UND

Dann habe ich versucht UND zu lernen. Der Code ist der gleiche wie das Ändern des Lehrersignals in UND.

import tensorflow as tf
import tflearn

# Logical AND operator
X = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
Y = [[0.], [0.], [0.], [1.]]

# Graph definition
with tf.Graph().as_default():
    g = tflearn.input_data(shape=[None, 2])
    g = tflearn.fully_connected(g, 1, activation='sigmoid')
    g = tflearn.regression(g, optimizer='sgd', learning_rate=2., loss='mean_square')

    # Model training
    m = tflearn.DNN(g)
    m.fit(X, Y, n_epoch=2000, snapshot_epoch=False)

    # Test model
    print("Testing AND operator")
    print("0 and 0:", m.predict([[0., 0.]]))
    print("0 and 1:", m.predict([[0., 1.]]))
    print("1 and 0:", m.predict([[1., 0.]]))
    print("1 and 1:", m.predict([[1., 1.]]))

Das Ergebnis davon.

--
Training Step: 2000  | total loss: 0.00137
| SGD | epoch: 2000 | loss: 0.00137 -- iter: 4/4
--
Testing AND operator
0 and 0: [[8.591794176027179e-05]]
0 and 1: [[0.04014528915286064]]
1 and 0: [[0.03964542970061302]]
1 and 1: [[0.9525935053825378]]

Sicher wurde es UND.

XOR lernen

Da OR und AND linear getrennt werden können, ist eine Zwischenschicht nicht erforderlich, XOR kann jedoch nicht linear getrennt werden, sodass eine Zwischenschicht erforderlich ist. Im Beispielcode werden jedoch NAND und OR trainiert und kombiniert und verwendet, anstatt XOR direkt zu trainieren.

Ich wusste nicht, warum ich es nicht direkt trainierte, also schrieb ich einen Code, um XOR direkt zu trainieren.

import tensorflow as tf
import tflearn

# Logical XOR operator
X = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
Y = [[0.], [1.], [1.], [0.]]

# Graph definition
with tf.Graph().as_default():
    g = tflearn.input_data(shape=[None, 2])
    g = tflearn.fully_connected(g, 2, activation='sigmoid')
    g = tflearn.fully_connected(g, 1, activation='sigmoid')
    g = tflearn.regression(g, optimizer='sgd', learning_rate=2., loss='mean_square')

    # Model training
    m = tflearn.DNN(g)
    m.fit(X, Y, n_epoch=2000, snapshot_epoch=False)

    # Test model
    print("Testing XOR operator")
    print("0 xor 0:", m.predict([[0., 0.]]))
    print("0 xor 1:", m.predict([[0., 1.]]))
    print("1 xor 0:", m.predict([[1., 0.]]))
    print("1 xor 1:", m.predict([[1., 1.]]))

Dies ließ den Lehrer nur XOR signalisieren und fügte zwei Zwischenschichten hinzu. Als ich das tat, stellte sich heraus, dass es so war.

--
Training Step: 2000  | total loss: 0.25000
| SGD | epoch: 2000 | loss: 0.25000 -- iter: 4/4
--
Testing XOR operator
0 xor 0: [[0.5000224709510803]]
0 xor 1: [[0.5000009536743164]]
1 xor 0: [[0.49999910593032837]]
1 xor 1: [[0.4999775290489197]]

Das kann ich nicht lernen Als ich googelte, wurde die nächste Seite abgefangen. Es ist die übliche Stack Overflow-Site.

tflearn / tensorflow does not learn xor

Demnach scheint bei der Standardeinstellung der Anfangswert des Gewichts mit einer Standardabweichung von 0,02 ziemlich eng zu sein. Daher scheint es besser, den Bereich der Anfangsgewichtswerte von -1 bis 1 zu erweitern.

import tensorflow as tf
import tflearn

# Logical XOR operator
X = [[0., 0.], [0., 1.], [1., 0.], [1., 1.]]
Y = [[0.], [1.], [1.], [0.]]

# Graph definition
with tf.Graph().as_default():
    tnorm = tflearn.initializations.uniform(minval=-1.0, maxval=1.0)
    g = tflearn.input_data(shape=[None, 2])
    g = tflearn.fully_connected(g, 2, activation='sigmoid', weights_init=tnorm)
    g = tflearn.fully_connected(g, 1, activation='sigmoid', weights_init=tnorm)
    g = tflearn.regression(g, optimizer='sgd', learning_rate=2., loss='mean_square')

    # Model training
    m = tflearn.DNN(g)
    m.fit(X, Y, n_epoch=2000, snapshot_epoch=False)

    # Test model
    print("Testing XOR operator")
    print("0 xor 0:", m.predict([[0., 0.]]))
    print("0 xor 1:", m.predict([[0., 1.]]))
    print("1 xor 0:", m.predict([[1., 0.]]))
    print("1 xor 1:", m.predict([[1., 1.]]))

Das Ergebnis der Ausführung durch Ändern der Einstellung des Anfangswertes des Gewichts auf diese Weise.

--
Training Step: 2000  | total loss: 0.00131
| SGD | epoch: 2000 | loss: 0.00131 -- iter: 4/4
--
Testing XOR operator
0 xor 0: [[0.03527239337563515]]
0 xor 1: [[0.9663047790527344]]
1 xor 0: [[0.9607295393943787]]
1 xor 1: [[0.03082425333559513]]

Ich konnte XOR sicher lernen.

Eindrücke vom Spielen mit TF Learn

Es ist leicht zu verstehen, da der Code der Idee des neuronalen Netzwerks entspricht. Es ist möglicherweise nicht möglich, TensorFlow zu optimieren, aber für diejenigen, die nicht wissen, was TensorFlow überhaupt kann, warum nicht mit TF Learn beginnen?

Recommended Posts

Ich habe versucht, mit TF Learn die logische Operation zu lernen
Ich habe versucht, PredNet zu lernen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe versucht, DCGAN mit PyTorch zu implementieren und zu lernen
Ich habe versucht, Autoencoder mit TensorFlow zu implementieren
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Ich habe versucht, das Lesen von Dataset mit PyTorch zu implementieren
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, GAN (mnist) mit Keras zu bewegen
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe versucht, mit OpenCV Bewegungen schnell zu erkennen
Ich habe versucht, Keras in TFv1.1 zu integrieren
Ich habe versucht, VAE Bewegungsgrafiken lernen zu lassen
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht zu debuggen.
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, ein Objekt mit M2Det zu erkennen!
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, das Überleben der Titanic mit PyCaret vorherzusagen
Ich habe versucht, Linux mit Discord Bot zu betreiben
Ich habe versucht, DP mit Fibonacci-Sequenz zu studieren
Ich habe versucht, Jupyter mit allen Amazon-Lichtern zu starten
DCGAN mit TF Learn
Ich habe versucht, Tundele mit Naive Bays zu beurteilen
Mayungos Python Learning Episode 5: Ich habe versucht, vier Regeln mit Zahlen zu machen
Ich habe versucht, die Operationen zusammenzufassen, die wahrscheinlich mit numpy-stl verwendet werden
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Ich habe versucht, mit VOICEROID2 2 automatisch zu lesen und zu speichern
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, mit VOICEROID2 automatisch zu lesen und zu speichern
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, ObjectId (Primärschlüssel) mit Pymongo zu generieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, eine ML-Pipeline mit Cloud Composer zu erstellen
Ich habe versucht, unsere Dunkelheit mit der Chatwork-API aufzudecken
[Einführung in Pytorch] Ich habe versucht, Cifar10 mit VGG16 ♬ zu kategorisieren
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Ich habe versucht, Grad-CAM mit Keras und Tensorflow zu implementieren
Ich habe versucht, eine OCR-App mit PySimpleGUI zu erstellen
Ich habe versucht, SSD jetzt mit PyTorch zu implementieren (Dataset)
Ich habe versucht, Mask R-CNN mit Optical Flow zu interpolieren
Ich habe versucht, die Bayes'sche Optimierung zu durchlaufen. (Mit Beispielen)
Ich habe versucht, die alternative Klasse mit Tensorflow zu finden
[Einführung in AWS] Ich habe versucht, mit der Sprach-Text-Konvertierung zu spielen ♪