[PYTHON] Versuchen Sie, XOR mit PyTorch zu implementieren

Einführung

Wenn Sie mit Keras machen möchten, was Sie wollen, verwenden Sie am Ende Tensorflow, also ist PyTorch besser, oder? Also habe ich sofort XOR implementiert.

Umgebung

Quelle

import torch
import torch.nn as nn
import torch.optim as optim


class Net(nn.Module):

    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = torch.nn.Linear(2, 8)
        self.fc2 = torch.nn.Linear(8, 8)
        self.fc3 = torch.nn.Linear(8, 1)
        self.sigmoid = nn.Sigmoid()

    def forward(self, x):
        x = torch.nn.functional.relu(self.fc1(x))
        x = torch.nn.functional.relu(self.fc2(x))
        x = self.fc3(x)
        x = self.sigmoid(x)
        return x


def main():

    import numpy as np
    x = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
    y = np.array([[0], [1], [1], [0]])

    num_epochs = 10000

    # convert numpy array to tensor
    x_tensor = torch.from_numpy(x).float()
    y_tensor = torch.from_numpy(y).float()

    # crate instance
    net = Net()

    # set training mode
    net.train()

    # set training parameters
    optimizer = torch.optim.SGD(net.parameters(), lr=0.01)
    criterion = torch.nn.MSELoss()

    # start to train
    epoch_loss = []
    for epoch in range(num_epochs):
        print(epoch)
        # forward
        outputs = net(x_tensor)

        # calculate loss
        loss = criterion(outputs, y_tensor)

        # update weights
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()

        # save loss of this epoch
        epoch_loss.append(loss.data.numpy().tolist())

    print(net(torch.from_numpy(np.array([[0, 0]])).float()))
    print(net(torch.from_numpy(np.array([[1, 0]])).float()))
    print(net(torch.from_numpy(np.array([[0, 1]])).float()))
    print(net(torch.from_numpy(np.array([[1, 1]])).float()))

if __name__ == "__main__":
    main()

Ergebnis

tensor([[0.0511]], grad_fn=<SigmoidBackward>)
tensor([[0.9363]], grad_fn=<SigmoidBackward>)
tensor([[0.9498]], grad_fn=<SigmoidBackward>)
tensor([[0.0666]], grad_fn=<SigmoidBackward>)

Oh, es fühlt sich gut an.

Impressionen

Es ist immer noch eine Berührung, aber im Vergleich zu Keras und Tensorflow fühlt es sich nicht wie eine Black Box an und es fühlt sich an, als könnte es nahtlos von Python aus verwendet werden. Selbst wenn Sie beispielsweise eine print-Anweisung in das Modell einfügen, wird diese unverändert ausgegeben. Die Visualisierung während der Ausführung scheint sehr einfach zu sein.

Recommended Posts

Versuchen Sie, XOR mit PyTorch zu implementieren
Versuchen Sie, XOR mit der Keras Functional API zu implementieren
Versuchen Sie, RBM mit Chainer zu implementieren.
Versuchen Sie Auto Encoder mit Pytorch
Versuchen Sie, Parfüm mit Go zu implementieren
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Spiele mit PyTorch
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Kreuzvalidierung mit PyTorch
Beginnend mit PyTorch
Versuchen Sie es mit Python.
Verwenden Sie RTX 3090 mit PyTorch
Versuchen Sie es mit semantischer Segmentierung (Pytorch)
Versuchen Sie SNN mit BindsNET
Installieren Sie Fackelstreuung mit PyTorch 1.7
Versuchen Sie eine Regression mit TensorFlow
Versuchen Sie, assoziativen Speicher durch Hop-Field-Netzwerk in Python zu implementieren
Versuchen Sie, das LWMA von MetaTrader mit der FIR-Filterfunktion von scipy zu implementieren
Versuchen Sie, den Boden durch Rekursion herauszufordern
Versuchen Sie, das strukturierte gRPC-Protokoll einfach und einfach mit grpc_zap zu implementieren
Versuchen Sie die Funktionsoptimierung mit Optuna
Versuchen Sie es mit TensorFlow
Versuchen Sie, PythonTex mit Texpad zu verwenden.
Versuchen Sie die Kantenerkennung mit OpenCV
Versuchen Sie Google Mock mit C.
Versuchen Sie es mit matplotlib mit PyCharm
Versuchen Sie die GUI-Programmierung mit Hy
Probieren Sie die Python-Ausgabe mit Haxe 3.2 aus
Versuchen Sie die Matrixoperation mit NumPy
Versuchen Sie, CNN mit ChainerRL auszuführen
Probieren Sie verschiedene Dinge mit PhantomJS aus
Versuchen Sie Deep Learning mit FPGA
Implementieren Sie PyTorch + GPU mit Docker
Vorhersage des Nikkei-Durchschnitts mit Pytorch 2
Maschinelles Lernen Minesweeper mit PyTorch
PyTorch mit AWS Lambda [Lambda-Import]
Versuchen Sie, Python mit Try Jupyter auszuführen
Lassen Sie uns Yuma in Python 3 implementieren
Vorhersage des Nikkei-Durchschnitts mit Pytorch
Probieren Sie Selenium Grid mit Docker aus
Führen Sie mit PyTorch eine geschichtete Aufteilung durch
Versuchen Sie die Gesichtserkennung mit Python
Probieren Sie OpenCV mit Google Colaboratory aus
Ich habe Word2Vec mit Pytorch gemacht
Versuchen Sie es mit Kaggle leicht maschinell
Versuchen Sie TensorFlow MNIST mit RNN
Versuchen Sie, Jupyter Hub mit Docker zu erstellen
Versuchen Sie es mit Folium mit Anakonda
Versuchen Sie, eine lineare Regression mit Pytorch mit Google Colaboratory zu implementieren
Implementierung der logistischen Regression mit NumPy
Vermeiden Sie die Implementierung nutzloser Funktionen mit Vererbung
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Versuchen Sie es mit Python + Beautiful Soup
Lernen stärken 13 Probieren Sie Mountain_car mit ChainerRL aus.
Versuchen Sie, Yuma in der Sprache Go zu implementieren
[PyTorch Tutorial ⑤] PyTorch anhand von Beispielen lernen (Teil 2)
Lernen Sie mit PyTorch Graph Convolutional Networks
Versuchen Sie, Facebook mit Python zu betreiben
Versuchen Sie die Singularwertzerlegung mit Python