[PYTHON] Un débutant en apprentissage automatique a essayé la RBM

en premier...

Message de Qiita Beginner. C'est difficile à voir ... ou quelque chose comme ça, tout le monde peut le faire! S'il vous plaît, pardonnez-moi ... Jusqu'au dernier, il a été réalisé par M. Zero, qui n'a aucune connaissance de l'apprentissage automatique et de l'intelligence artificielle. (Au début, quelle était l'époque? Qu'est-ce que la précision? Ww)

Qu'est-ce que RBM

RBM(Restricted Boltzmann machine) C'est une sorte de méthode de pré-formation en Deep Learning, et c'est une sorte de modèle qui s'accorde parfaitement avec AutoEncoder, qui est souvent entendu. Le modèle a été inventé entre 1984 et 1986, dans l'espoir d'un avantage en mécanique statistique. Il est connu comme un modèle très pratique car il s'agit d'un modèle de génération qui permet des discussions sur une distribution de probabilité, contrairement à Autoencoder, qui reçoit des entrées et détermine la sortie de manière déterministe. スクリーンショット 2020-08-30 13.46.03.png

Deep Learning from RBM ~ With Black Magic ~

Je ne suis pas sûr ...

J'ai beaucoup cherché!

Alors ... Il y a quelque chose qui s'appelle BernoulliRBM dans scikit learn! je dois le faire

la mise en oeuvre

Pour le moment, exécutez-le avec un jeu de données appelé MNIST!

RBM.ipynb


import numpy as np
import matplotlib.pyplot as plt

from scipy.ndimage import convolve
from sklearn import linear_model, datasets, metrics
from sklearn.model_selection import train_test_split
from sklearn.neural_network import BernoulliRBM
from sklearn.pipeline import Pipeline
from sklearn.base import clone

#Ensemble de données utilisé
from keras.datasets import fashion_mnist
from keras.datasets import mnist

from keras.layers import Input, Dense
from keras.models import Model
from keras import layers, models

import time
import numpy

Pour le moment, l'importation ressemble à ce qui précède

Ensuite, faites comme indiqué dans l'exemple (de nombreuses pièces ne savent pas comment traiter)

RBM.ipynb


def nudge_dataset(X, Y):
    """
    This produces a dataset 5 times bigger than the original one,
    by moving the 8x8 images in X around by 1px to left, right, down, up
    """
    direction_vectors = [
        [[0, 1, 0],
         [0, 0, 0],
         [0, 0, 0]],

        [[0, 0, 0],
         [1, 0, 0],
         [0, 0, 0]],

        [[0, 0, 0],
         [0, 0, 1],
         [0, 0, 0]],

        [[0, 0, 0],
         [0, 0, 0],
         [0, 1, 0]]]

    def shift(x, w):
        return convolve(x.reshape((8, 8)), mode='constant', weights=w).ravel()

    X = np.concatenate([X] +
                       [np.apply_along_axis(shift, 1, X, vector)
                        for vector in direction_vectors])
    Y = np.concatenate([Y for _ in range(5)], axis=0)
    return X, Y


# Load Data
# (x_train, y_train), (x_test, y_test) = mnist.load_data()
# X, y = mnist.load_data()
# X = np.asarray(X, 'float32')
# X, Y = nudge_dataset(X, y)
# X = (X - np.min(X, 0)) / (np.max(X, 0) + 0.0001)  # 0-1 scaling

# X_train, X_test, Y_train, Y_test = train_test_split(
#     X, Y, test_size=0.2, random_state=0)

# (X_train, Y_train), (X_test, Y_test) = fashion_mnist.load_data()
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

X_train = X_train.astype('float32') / 255.
X_test = X_test.astype('float32') / 255.
X_train = X_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
X_test = X_test.reshape((len(x_test), np.prod(x_test.shape[1:])))

# Models we will use
logistic = linear_model.LogisticRegression(solver='newton-cg', tol=1)
rbm = BernoulliRBM(random_state=0, verbose=True)

rbm_features_classifier = Pipeline(
    steps=[('rbm', rbm), ('logistic', logistic)])

# #############################################################################
# Training

# Hyper-parameters. These were set by cross-validation,
# using a GridSearchCV. Here we are not performing cross-validation to
# save time.
rbm.learning_rate = 0.06
rbm.n_iter = 10
# More components tend to give better prediction performance, but larger
# fitting time
rbm.n_components = 100
logistic.C = 6000

# Training RBM-Logistic Pipeline
rbm_features_classifier.fit(X_train, Y_train)

# Training the Logistic regression classifier directly on the pixel
raw_pixel_classifier = clone(logistic)
raw_pixel_classifier.C = 100.
raw_pixel_classifier.fit(X_train, Y_train)

# #############################################################################
# Evaluation

Y_pred = rbm_features_classifier.predict(X_test)
print("Logistic regression using RBM features:\n%s\n" % (
    metrics.classification_report(Y_test, Y_pred)))

Y_pred = raw_pixel_classifier.predict(X_test)
print("Logistic regression using raw pixel features:\n%s\n" % (
    metrics.classification_report(Y_test, Y_pred)))

Désolé pour le code source sale ... Je dois supprimer le commentaire ... C'est difficile d'écrire du beau code ...

J'utilise Bernoulli RBM de la bibliothèque sklearn. Dans cet exemple, nous construisons un pipeline de classification à l'aide de l'extracteur de fonctionnalités Bernoulli RBM et du classificateur de régression logistique. À titre de comparaison, nous présentons une régression logistique sur les valeurs brutes des pixels.

[Code source RBM (sklearn)](https://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html#sphx-glr-auto-examples-neural-networks-plot-rbm-logistic-classification -py)

résultat

スクリーンショット 2020-08-30 14.03.44.pngスクリーンショット2020-08-3014.03.56.png

MNIST...Accuracy: 0.97 Fashion-MNIST...Accuracy: 0.79

Il faudra beaucoup de temps pour augmenter le nombre d'époques, alors réglez le nombre d'époques à 10 (pas de temps pour soumettre l'affectation ...)

Conclusion

J'ai essayé de copier et d'implémenter le code source, mais il a fallu beaucoup de temps pour le trouver ... Je dois comprendre plus! J'ai pensé. Après cela, un graphique? J'ai pensé qu'il serait plus facile de comprendre si je pouvais afficher la fonction de perte et ainsi de suite.

Je le posterai petit à petit désormais. Je veux publier un docker et un contenu Web ... J'ai hâte de travailler avec vous.

Recommended Posts

Un débutant en apprentissage automatique a essayé la RBM
Apprentissage automatique
J'ai essayé l'apprentissage automatique avec liblinear
Résumé de l'apprentissage automatique par les débutants de Python
Les débutants en apprentissage automatique essaient la régression linéaire
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
Les débutants en apprentissage automatique suivent le cours d'apprentissage en profondeur de Coursera
Premiers pas pour les débutants en apprentissage automatique (IA)
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Ordre d'étude recommandé pour les débutants en apprentissage automatique / apprentissage en profondeur
Liste des liens que les débutants en apprentissage automatique apprennent
[Pour les débutants] Introduction à la vectorisation dans l'apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
J'ai essayé le deep learning
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
Les débutants en apprentissage automatique essaient de créer un arbre de décision
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
Tout pour que les débutants puissent faire du machine learning
Modèle d'apprentissage automatique prenant en compte la maintenabilité
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Oncle SE avec un cerveau endurci a essayé d'étudier l'apprentissage automatique
Flux d'apprentissage pour les débutants en Python
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification
Machine Learning: Supervision - Régression linéaire
Bases de l'apprentissage automatique (mémoire)
Les débutants en Python publient des applications Web à l'aide de l'apprentissage automatique [Partie 1] Introduction
[Apprentissage automatique] Comprendre la forêt aléatoire
Apprentissage automatique avec Python! Préparation
Bloc-notes de ressources d'étude d'apprentissage automatique
Apprentissage automatique ② Résumé Naive Bayes
J'ai essayé d'utiliser Tensorboard, un outil de visualisation pour l'apprentissage automatique
Comprendre l'apprentissage automatique ~ régression de crête ~.
J'ai essayé l'apprentissage automatique pour convertir des phrases en style XX
Résumé de l'article sur l'apprentissage automatique (auto-écrit)
À propos de la matrice mixte d'apprentissage automatique
Apprentissage automatique: forêt supervisée - aléatoire
Les débutants en apprentissage automatique tentent de contacter Naive Bayes (2) - Mise en œuvre
Mémo pratique du système d'apprentissage automatique
Démineur d'apprentissage automatique avec PyTorch