Un aperçu simple de l'apprentissage en profondeur Perceptron multicouche (MLP)

Contenu

Cet article a été publié dans le cadre du Blogathon sur la science des données.

introduction

Comprendre ce réseau nous aide à obtenir des informations sur les raisons sous-jacentes dans les modèles avancés de Deep Learning. Le perceptron multicouche est couramment utilisé pour les problèmes de régression simple. Cependant, Les MLP ne sont pas idéaux pour traiter des motifs avec des données séquentielles et multidimensionnelles.

🙄 Un perceptron multicouche s'efforce de mémoriser les motifs dans les données séquentielles, à cause de, il nécessite une “grande” quantité de paramètres pour traiter des données multidimensionnelles.

Pour les données séquentielles, les RNN ils sont préférés car leurs motifs permettent au réseau de découvrir la dépendance 🧠 des données historiques, ce qui est très utile pour les prédictions. Pour les données, comme les images et les vidéos, CNN ils excellent dans l'extraction de cartes de caractéristiques pour la classification, segmentation, entre autres tâches.
Dans certains cas, un CNN sous forme de Conv1D / 1D est également utilisé pour les réseaux avec des données d'entrée séquentielles. Cependant, la plupart des modèles de L'apprentissage en profondeur, MLP, CNN ou RNN sont combinés pour tirer le meilleur parti de chacun.

MLP, CNN et RNN ne font pas tout …
Une grande partie de leur succès provient de l'identification de leur objectif et du bon choix de certains paramètres, Quoi Fonction de perte, Optimiseur, Oui Régularisateur.

Nous disposons également de données externes à l'environnement de formation. Le rôle du régularisateur est de garantir que le modèle entraîné se généralise à de nouvelles données.

1eloyeyfrblghvzhu345pjw-5950207

Ensemble de données MNIST

Supposons que notre objectif soit de créer un réseau pour identifier les nombres basés sur les chiffres manuscrits. Par exemple, lorsque l'entrée du réseau est une image d'un chiffre 8, la prévision correspondante doit également être 8.
🤷🏻‍♂️ Este es un trabajo básico de clasificación con redes neuronales.

Antes de analizar el modelo MLP, es esencial comprender el conjunto de datos del MNIST. Se utiliza para explicar y validar muchas teorías de l'apprentissage en profondeur porque las 70.000 imágenes que contiene son pequeñas pero suficientemente ricas en información;

mninst-digits-6507742

MNIST es una colección de dígitos que van del 0 Al 9. Tiene un conjunto de entraînement de 60.000 imágenes y 10.000 pruebas clasificadas en categorías.

Usar el conjunto de datos MNIST en TensorFlow es simple.

importer numpy comme par exemple
de tensorflow.keras.datasets importer mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
Les mnist.load_data () El método es conveniente, ya que no es necesario cargar las 70.000 imágenes y sus etiquetas.

Antes de entrar en el clasificador de Perceptrón Multicapa, es fundamental tener en cuenta que, si bien los datos del MNIST constan de tensores bidimensionales, se deben remodelar, según el tipo de couche d'entrée.

Se cambia la forma de una imagen en escala de grises de 3 × 3 para las capas de entrada MLP, CNN y RNN:

inputs-nn-8592597

Las etiquetas tienen forma de dígitos, du 0 Al 9.

num_labels = len(np.unique(y_train))
imprimer("total de labels:t{}".format(nombre_étiquettes))
imprimer("Étiquettes:ttt{0}".format(np.unique(y_train)))

⚠️ Esta representación no es adecuada para la capa de pronóstico que genera probabilidad por clase. El formato más adecuado es one-hot, un vector de 10 dimensiones como todos los valores 0, excepto el indice de clase. Par exemple, si la etiqueta es 4, el vector equivalente es [0,0,0,0, 1, 0,0,0,0,0].

Apprentissage en profondeur, los datos se almacenan en un tenseur. El término tensor se aplica a un tensor escalar (tensor 0D), vector (tensor 1D), quartier général (tensor bidimensional) Oui tensor multidimensional.

#converter em one-hot
from tensorflow.keras.utils import to_categorical
y_train = to_categorical(y_train)
y_test = to_categorical(y_test)

Nuestro modelo es un MLP, por lo que sus entradas deben ser un tensor 1D. En tant que tel, x_train y x_test deben transformarse en [60,000, 2828] Oui [10,000, 2828],

En sume, el tamaño de -1 significa permitir que la biblioteca calcule la dimensión correcta. En el caso de x_train, il est 60.000.

image_size = x_train.shape[1] 
input_size = image_size * image_size

print("x_train:t{}".format(x_train.shape))
imprimer("x_test:tt{}m".format(x_test.shape))

x_train = np.reshape(x_train, [-1, taille_entrée])
x_train = x_train.astype('float32') / 255

x_test = np.reshape(x_test, [-1, taille_entrée])
x_test = x_test.astype('float32') / 255

imprimer("x_train:t{}".format(x_train.shape))
imprimer("x_test:tt{}".format(x_test.shape))
OUTPUT:
x_train:	(60000, 28, 28)
x_test:		(10000, 28, 28)

x_train:	(60000, 784)
x_test:		(10000, 784)

Construire le modèle

mlp-nn-3471040
Nuestro modelo consta de tres capas de perceptrón multicapa en una Capa Densa. El primero y el segundo son idénticos, seguidos de un donc ici (reprendre) Oui Laisser fonction de réveil.

1oepahrm74rnnneolprmtaq-9887397

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Abandonner

# Parameters
batch_size = 128 # It is the sample size of inputs to be processed at each training stage. 
hidden_units = 256
abandon = 0.45

# Nossa  MLP com ReLU e Dropout 
model = Sequential()

model.ajouter(Dense(hidden_units, input_dim=input_size))
model.ajouter(Activation('relu'))
model.ajouter(Abandonner(abandonner))

model.ajouter(Dense(hidden_units))
model.ajouter(Activation('relu'))
model.ajouter(Abandonner(abandonner))

model.ajouter(Dense(nombre_étiquettes))

Régularisation

Una red neuronal tiende a memorizar sus datos de entrenamiento, especialmente si contiene capacidad más que suficiente. Dans ce cas, la red falla catastróficamente cuando se somete a los datos de prueba.

Este es el caso clásico en el que la red no logra generalizar (Surapprentissage / Sous-apprentissage). Pour éviter cette tendance, le modèle utilise une couche régulatrice. Laisser.

1iwqzxhvlvadk6vajjsgxgg-5873176

L'idée du Dropout est simple. Étant donné un taux d'abandon (dans notre modèle, nous fixons = 0,45), la couche supprime aléatoirement cette fraction d'unités.

Par exemple, si la première couche a 256 unités, après l'application du dropout (0.45), solo (1 – 0.45) * 255 = 140 des unités participeront à la couche suivante

Le dropout rend les réseaux neuronaux plus robustes face aux données d'entrée imprévues, parce que le réseau est entraîné pour prédire correctement, même si certaines unités sont absentes.

⚠️ Le dropout intervient uniquement « jouer » 🤷🏻‍♂️ pendant l'entraînement.

Activation

La Couche de sortie possède 10 unités, suivies d'une fonction d'activation softmax. Le 10 les unités correspondent aux 10 étiquettes possibles, classes ou catégories.

L'activation softmax peut être exprimée mathématiquement, selon l'équation suivante:

1ui7n5s48-qnf7bbgfdpioq-7950293

model.ajouter(Activation('softmax'))
modèle.résumé()
OUTPUT:
Modèle: "séquentiel"
_________________________________________________________________
Couche (taper)                 Paramètre de forme de sortie #   
=================================================================
dense (Dense)                (Rien, 256)               200960    
_________________________________________________________________
activation (Activation)      (Rien, 256)               0         
_________________________________________________________________
dropout (Abandonner)            (Rien, 256)               0         
_________________________________________________________________
dense_1 (Dense)              (Rien, 256)               65792     
_________________________________________________________________
activation_1 (Activation)    (Rien, 256)               0         
_________________________________________________________________
abandon_1 (Abandonner)          (Rien, 256)               0         
_________________________________________________________________
dense_2 (Dense)              (Rien, 10)                2570      
_________________________________________________________________
activation_2 (Activation)    (Rien, 10)                0         
================================================== ================
Paramètres totaux: 269,322
Paramètres entraînables: 269,322
Paramètres non entraînables: 0
_________________________________________________________________

Visualización de modelos

Amélioration

El propósito de la Optimización es minimizar la función de pérdida. La idea es que si la pérdida se reduce a un nivel aceptable, el modelo aprendió indirectamente la función que asigna las entradas a las salidas. Las métricas de rendimiento se utilizan para determinar si su modelo ha aprendido.

modèle.compile(perte ="catégorique_crossentropie", optimiseur="Adam", métriques=['précision'])
    • Categorical_crossentropy, se utiliza para one-hot
    • La precisión es una buena métrica para las tareas de clasificación.
    • Adam es un Algorithme d’optimisation que se puede utilizar en lugar del procedimiento clásico de descenso de pente stochastique

📌 Dado nuestro conjunto de entrenamiento, la elección de la Fonction de perte, el optimizador y el regularizador, podemos comenzar a entrenar nuestro modelo.

model.fit(x_train, y_train, époques=20, batch_size=bat_size)
OUTPUT:
Époque 1/20
469/469 [===============================] - 1s 3ms/step - perte: 0.4230 - précision: 0.8690
....
Époque 20/20
469/469 [===============================] - 2s 4ms/pas - perte: 0.0515 - précision: 0.9835

Évaluation

En ce point, nuestro modelo de clasificador de dígitos MNIST está completo. Su evaluación de desempeño será el siguiente paso para determinar si el modelo entrenado presentará una solución subóptima

_, acc = model.evaluate(x_test,
                        y_test,
                        batch_size=bat_size,
                        verbeux=0)
imprimer("nAccuracy: %.1f%%n" % (100.0 * acc))
OUTPUT:
Précision: 98.4%

continuará…

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.

Haut-parleur de données