[PYTHON] Essayez d'implémenter XOR avec PyTorch

introduction

Si vous voulez faire ce que vous voulez avec Keras, vous finissez par utiliser tensorflow, donc PyTorch est mieux, non? J'ai donc immédiatement implémenté XOR.

environnement

La source

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

résultat

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, ça fait du bien.

Impressions

C'est toujours juste une touche, mais comparé à Keras et Tensorflow, cela ne ressemble pas à une boîte noire et on a l'impression qu'il peut être utilisé de manière transparente à partir de Python. Par exemple, même si vous mettez une instruction d'impression dans le modèle, elle sera sortie telle quelle. La visualisation pendant l'exécution semble être très facile à faire.

Recommended Posts

Essayez d'implémenter XOR avec PyTorch
Essayez d'implémenter XOR avec l'API fonctionnelle Keras
Essayez d'implémenter RBM avec chainer.
Essayez Auto Encoder avec Pytorch
Essayez d'implémenter le parfum avec Go
J'ai essayé d'implémenter DeepPose avec PyTorch
Jouez avec PyTorch
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
Validation croisée avec PyTorch
À partir de PyTorch
Essayez de gratter avec Python.
Utilisez RTX 3090 avec PyTorch
Essayez la segmentation sémantique (Pytorch)
Essayez SNN avec BindsNET
Installer la diffusion de la torche avec PyTorch 1.7
Essayez la régression avec TensorFlow
Essayez d'implémenter la mémoire associative par hop field network en Python
Essayez d'implémenter le LWMA de MetaTrader avec la fonction de filtre FIR de scipy
Essayez de défier le sol par récursif
Essayez d'implémenter le journal structuré gRPC facilement et simplement avec grpc_zap
Essayez l'optimisation des fonctions avec Optuna
Essayez l'apprentissage en profondeur avec TensorFlow
Essayez d'utiliser PythonTex avec Texpad.
Essayez la détection des bords avec OpenCV
Essayez Google Mock avec C
Essayez d'utiliser matplotlib avec PyCharm
Essayez la programmation GUI avec Hy
Essayez la sortie Python avec Haxe 3.2
Essayez l'opération matricielle avec NumPy
Essayez d'exécuter CNN avec ChainerRL
Essayez différentes choses avec PhantomJS
Essayez le Deep Learning avec FPGA
Implémenter le GPU PyTorch + avec Docker
Prédiction de la moyenne Nikkei avec Pytorch 2
Démineur d'apprentissage automatique avec PyTorch
PyTorch avec AWS Lambda [importation Lambda]
Essayez d'exécuter Python avec Try Jupyter
Implémentons Yuma dans Python 3
Prédiction de la moyenne Nikkei avec Pytorch
Essayez Selenium Grid avec Docker
Effectuer un fractionnement stratifié avec PyTorch
Essayez la reconnaissance faciale avec Python
Essayez OpenCV avec Google Colaboratory
J'ai créé Word2Vec avec Pytorch
Essayez le machine learning à la légère avec Kaggle
Essayez TensorFlow MNIST avec RNN
Essayez de créer Jupyter Hub avec Docker
Essayez d'utiliser le folium avec anaconda
Essayez d'implémenter la régression linéaire à l'aide de Pytorch avec Google Colaboratory
Implémentation de la régression logistique avec NumPy
Évitez d'implémenter des fonctions inutiles avec l'héritage
Essayez le Deep Learning avec les concombres FPGA-Select
Essayez de gratter avec Python + Beautiful Soup
Renforcer l'apprentissage 13 Essayez Mountain_car avec ChainerRL.
Essayez d'implémenter Yuma en langage Go
[Tutoriel PyTorch ⑤] Apprentissage de PyTorch avec des exemples (Partie 2)
Apprenez avec les réseaux convolutifs PyTorch Graph
Essayez d'exploiter Facebook avec Python
Essayez la décomposition de valeurs singulières avec Python