Qu'est-ce que Keras? L'API du réseau neuronal profond expliqué

Alors que les réseaux de neurones profonds font fureur, la complexité des principaux frameworks a été un obstacle à leur utilisation pour les développeurs novices en apprentissage automatique. Il y a eu plusieurs propositions pour des API de haut niveau améliorées et simplifiées pour la construction de modèles de réseaux de neurones, qui ont toutes tendance à se ressembler à distance mais montrent des différences à un examen plus approfondi.

Keras est l'une des principales API de réseaux de neurones de haut niveau. Il est écrit en Python et prend en charge plusieurs moteurs de calcul de réseau neuronal back-end.

Keras et TensorFlow

Étant donné que le projet TensorFlow a adopté Keras comme API de haut niveau pour la prochaine version de TensorFlow 2.0, Keras semble être un gagnant, sinon nécessairement le gagnant. Dans cet article, nous explorerons les principes et la mise en œuvre de Keras, en vue de comprendre pourquoi il s'agit d'une amélioration par rapport aux API d'apprentissage en profondeur de bas niveau.

Même dans TensorFlow 1.12, le didacticiel officiel Get Started with TensorFlow utilise l'API Keras de haut niveau intégrée à TensorFlow, tf.keras . En revanche, l'API TensorFlow Core nécessite de travailler avec des graphes, des tenseurs, des opérations et des sessions de calcul TensorFlow, dont certains peuvent être difficiles à comprendre lorsque vous commencez tout juste à travailler avec TensorFlow. L'utilisation de l'API TensorFlow Core de bas niveau présente certains avantages, principalement lors du débogage, mais heureusement, vous pouvez mélanger les API TensorFlow de haut niveau et de bas niveau si nécessaire.

Principes de Keras

Keras a été créé pour être convivial, modulaire, facile à étendre et pour fonctionner avec Python. L'API a été «conçue pour les êtres humains, pas pour les machines» et «suit les meilleures pratiques pour réduire la charge cognitive».

Les couches neuronales, les fonctions de coût, les optimiseurs, les schémas d'initialisation, les fonctions d'activation et les schémas de régularisation sont tous des modules autonomes que vous pouvez combiner pour créer de nouveaux modèles. Les nouveaux modules sont simples à ajouter, en tant que nouvelles classes et fonctions. Les modèles sont définis dans du code Python et non dans des fichiers de configuration de modèle séparés.

Pourquoi Keras?

Les principales raisons d'utiliser Keras découlent de ses principes directeurs, principalement celui de la convivialité. Au-delà de la facilité d'apprentissage et de la facilité de création de modèle, Keras offre les avantages d'une large adoption, la prise en charge d'un large éventail d'options de déploiement de production, l'intégration avec au moins cinq moteurs back-end (TensorFlow, CNTK, Theano, MXNet et PlaidML), et un support solide pour plusieurs GPU et une formation distribuée. De plus, Keras est soutenu par Google, Microsoft, Amazon, Apple, Nvidia, Uber et d'autres.

Dos de Keras

Keras proprement dit ne fait pas ses propres opérations de bas niveau, telles que les produits tensoriels et les convolutions; il s'appuie pour cela sur un moteur back-end. Même si Keras prend en charge plusieurs moteurs back-end, son back-end principal (et par défaut) est TensorFlow, et son principal supporteur est Google. L'API Keras est fournie avec TensorFlow as tf.keras, qui, comme mentionné précédemment, deviendra l'API TensorFlow principale à partir de TensorFlow 2.0.

Pour modifier les back-ends, modifiez simplement votre $HOME/.keras/keras.jsonfichier et spécifiez un nom de back-end différent, tel que theanoou CNTK. Vous pouvez également remplacer le backend configuré en définissant la variable d'environnement KERAS_BACKEND, soit dans votre shell ou dans votre code Python à l'aide de la os.environ["KERAS_BACKEND"]propriété.

Modèles Keras

Le modèle est la structure de données principale de Keras. Il existe deux principaux types de modèles disponibles dans Keras: le Sequentialmodèle et la Modelclasse utilisée avec l'API fonctionnelle.

Modèles séquentiels Keras

Le Sequentialmodèle est un empilement linéaire de couches, et les couches peuvent être décrites très simplement. Voici un exemple de la documentation Keras qui utilise model.add()pour définir deux couches denses dans un Sequentialmodèle:

importer des keras

à partir de keras.models importation séquentielle

depuis keras.layers import Dense

#Créer un modèle séquentiel avec des couches denses, en utilisant la méthode add

#Dense implémente l'opération:

# sortie = activation (point (entrée, noyau) + biais)

#Units est la dimensionnalité de l'espace de sortie pour la couche,

# qui est égal au nombre d'unités cachées

# Les fonctions d'activation et de perte peuvent être spécifiées par des chaînes ou des classes

model.add (Dense (unités = 10, activation = "softmax"))

#La méthode de compilation configure le processus d'apprentissage du modèle

              optimizer = "sgd",

              metrics = ['précision'])

#La méthode fit s'entraîne par lots

# x_train et y_train sont des tableaux Numpy - tout comme dans l'API Scikit-Learn.

#La méthode d'évaluation calcule les pertes et les métriques

# pour le modèle entraîné

# La méthode prédire applique le modèle entraîné aux entrées

# pour générer des sorties

classes = model.predict (x_test, batch_size = 128)

Les commentaires dans le code ci-dessus valent la peine d'être lus. Il convient également de noter le peu de cruauté du code réel par rapport, par exemple, aux API TensorFlow de bas niveau. Chaque définition de couche nécessite une ligne de code, la compilation (définition du processus d'apprentissage) prend une ligne de code, et l'ajustement (formation), l'évaluation (calcul des pertes et des métriques) et la prévision des sorties du modèle formé prennent chacun une ligne de code .

API fonctionnelle Keras

Le modèle séquentiel Keras est simple mais limité dans la topologie du modèle. L'API fonctionnelle Keras est utile pour créer des modèles complexes, tels que des modèles multi-entrées / multi-sorties, des graphes acycliques dirigés (DAG) et des modèles avec des couches partagées.

L'API fonctionnelle utilise les mêmes couches que le modèle séquentiel mais offre plus de flexibilité pour les assembler. Dans l'API fonctionnelle, vous définissez d'abord les couches, puis créez le modèle, compilez-le et ajustez-le (entraînez). L'évaluation et la prédiction sont essentiellement les mêmes que dans un modèle séquentiel, elles ont donc été omises dans l'exemple de code ci-dessous.

à partir de keras.layers import Input, Dense

depuis keras.models import Model

# Cela renvoie un tenseur

# une instance de couche est appelable sur un tenseur, et renvoie un tenseur

x = Dense (64, activation = "relu") (x)

prédictions = Dense (10, activation = "softmax") (x)

# Cela crée un modèle qui inclut

# la couche d'entrée et trois couches denses

model.compile (optimiseur = 'rmsprop',

              loss = "catégorical_crossentropy",

              metrics = ['précision'])

model.fit (données, étiquettes)  # commence l'entraînement

Couches Keras

Dans les exemples précédents, nous n'avons utilisé que des Densecalques. Keras propose une large sélection de types de calques prédéfinis et prend également en charge l'écriture de vos propres calques.

Les couches principales incluent Dense(produit scalaire plus biais), Activation(fonction de transfert ou forme de neurone), Dropout(définir de manière aléatoire une fraction d'unités d'entrée à 0 à chaque mise à jour d'entraînement pour éviter le surajustement), Lambda(envelopper une expression arbitraire en tant Layerqu'objet), et plusieurs autres . Les couches de convolution (l'utilisation d'un filtre pour créer une carte d'entités) vont de 1D à 3D et incluent les variantes les plus courantes, telles que le recadrage et les couches de convolution transposées pour chaque dimensionnalité. La convolution 2D, inspirée de la fonctionnalité du cortex visuel, est couramment utilisée pour la reconnaissance d'images.

Les couches de pooling (downscaling) vont de 1D à 3D et incluent les variantes les plus courantes, telles que la mise en commun maximale et moyenne. Les couches connectées localement agissent comme des couches de convolution, sauf que les poids ne sont pas partagés. Les couches récurrentes comprennent les couches simples (récurrence entièrement connectée), gated, LSTM et autres; ceux-ci sont utiles pour le traitement du langage, entre autres applications. Les couches de bruit aident à éviter le surajustement.

Ensembles de données Keras

Keras fournit sept des exemples d'ensembles de données communs d'apprentissage profond via la keras.datasetsclasse. Cela comprend les petites images couleur cifar10 et cifar100, les critiques de films IMDB, les sujets de fil d'actualité Reuters, les chiffres manuscrits du MNIST, les images de mode MNIST et les prix des logements à Boston.

Applications et exemples Keras

Keras fournit également dix modèles bien connus, appelés Keras Applications, pré-entraînés contre ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Vous pouvez les utiliser pour prédire la classification des images, en extraire des caractéristiques et affiner les modèles sur un ensemble différent de classes.

Soit dit en passant, affiner les modèles existants est un bon moyen d'accélérer la formation. Par exemple, vous pouvez ajouter des couches à votre guise, geler les couches de base pour entraîner les nouvelles couches, puis dégeler certaines des couches de base pour affiner la formation. Vous pouvez figer un calque avec en définissant layer.trainable = False.

Le référentiel d'exemples Keras contient plus de 40 exemples de modèles. Ils couvrent les modèles de vision, le texte et les séquences et les modèles génératifs.

Déployer Keras

Les modèles Keras peuvent être déployés sur une vaste gamme de plates-formes, peut-être plus que tout autre framework d'apprentissage en profondeur. Cela inclut iOS, via CoreML (pris en charge par Apple); Android, via le runtime Android TensorFlow; dans un navigateur, via Keras.js et WebDNN; sur Google Cloud, via TensorFlow-Serving; dans un back-end Python webapp; sur la JVM, via l'importation de modèles DL4J; et sur Raspberry Pi.

Pour démarrer avec Keras, lisez la documentation, consultez le référentiel de code, installez TensorFlow (ou un autre moteur de backend) et Keras, et essayez le didacticiel de mise en route pour le modèle Keras Sequential. À partir de là, vous pouvez passer à d'autres didacticiels et éventuellement explorer les exemples Keras.