PyTorch vs Tensorflow pour votre projet Python Deep Learning – Real Python

By | septembre 2, 2020

Python pas cher

PyTorch vs TensorFlow: quelle est la différence? Les deux sont des bibliothèques Python open source qui utilisent des graphiques pour effectuer des calculs numériques sur les données. Les deux sont largement utilisés dans la recherche universitaire et le code commercial. Les deux sont étendus par une variété d'API, de plates-formes de cloud computing et de référentiels de modèles.

S'ils sont si similaires, lequel convient le mieux à votre projet?

Dans ce didacticiel, vous apprendrez:

  • Quelles sont les différences entre PyTorch et TensorFlow
  • Quoi outils et Ressources sont disponibles pour chaque
  • Comment choisir le Meilleure option pour votre cas d'utilisation spécifique

Vous allez commencer par examiner de près les deux plates-formes, en commençant par le TensorFlow légèrement plus ancien, avant d'explorer quelques considérations qui peuvent vous aider à déterminer le meilleur choix pour votre projet. Commençons!

Qu'est-ce que TensorFlow?

TensorFlow a été développé par Google et lancé en open source en 2015. Il est issu du logiciel d'apprentissage automatique de Google, qui a été remanié et optimisé pour une utilisation en production.

Le nom «TensorFlow» décrit comment vous organisez et effectuez des opérations sur les données. La structure de données de base pour TensorFlow et PyTorch est un tenseur. Lorsque vous utilisez TensorFlow, vous effectuez des opérations sur les données de ces tenseurs en créant un graphique de flux de données avec état, un peu comme un organigramme qui se souvient des événements passés.

Qui utilise TensorFlow?

TensorFlow a la réputation d'être une bibliothèque d'apprentissage en profondeur de niveau production. Il dispose d'une base d'utilisateurs importante et active et d'une prolifération d'outils et de plates-formes officiels et tiers pour la formation, le déploiement et le service de modèles.

Après la sortie de PyTorch en 2016, TensorFlow a perdu de sa popularité. Mais à la fin de 2019, Google a publié TensorFlow 2.0, une mise à jour majeure qui a simplifié la bibliothèque et l'a rendue plus conviviale, ce qui a suscité un regain d'intérêt au sein de la communauté d'apprentissage automatique.

Style de code et fonction

Avant TensorFlow 2.0, TensorFlow vous obligeait à assembler manuellement une arborescence de syntaxe abstraite – le graphe – en créant tf. * Appels API. Il vous a ensuite fallu compiler manuellement le modèle en passant un ensemble de tenseurs de sortie et de tenseurs d'entrée à un session.run () appel.

UNE Session object est une classe pour exécuter des opérations TensorFlow. Il contient l'environnement dans lequel Tenseur les objets sont évalués et Opération les objets sont exécutés et il peut posséder des ressources comme tf.Variable objets. La manière la plus courante d'utiliser un Session est en tant que gestionnaire de contexte.

Dans TensorFlow 2.0, vous pouvez toujours créer des modèles de cette manière, mais il est plus facile d'utiliser une exécution rapide, ce qui est la façon dont Python fonctionne normalement. L'exécution hâtive évalue les opérations immédiatement, vous pouvez donc écrire votre code à l'aide du flux de contrôle Python plutôt que du flux de contrôle graphique.

Pour voir la différence, voyons comment vous pouvez multiplier deux tenseurs en utilisant chaque méthode. Voici un exemple utilisant l'ancienne méthode TensorFlow 1.0:

>>>

>>> importer tensorflow comme tf

>>> tf.compat.v1.disable_eager_execution()

>>> X = tf.compat.v1.espace réservé(tf.float32, Nom = "X")
>>> y = tf.compat.v1.espace réservé(tf.float32, Nom = "y")

>>> multiplier = tf.multiplier(X, y)

>>> avec tf.compat.v1.Session() comme session:
...     m = session.courir(
...         multiplier, feed_dict=X: [[[[[[[[2., 4., 6.]], y: [[[[[[[[1.], [[[[3.], [[[[5.]]
...     )
...     impression(m)
[[ 2.  4.  6.]
 [ 6. 12. 18.]
 [10. 20. 30.]]

Ce code utilise TensorFlow 2.x tf.compat API pour accéder aux méthodes TensorFlow 1.x et désactiver l'exécution hâtive.

Vous déclarez d'abord les tenseurs d'entrée X et y en utilisant tf.compat.v1.placeholder objets tensoriels. Ensuite, vous définissez l'opération à effectuer sur eux. Ensuite, en utilisant le tf.Session objet en tant que gestionnaire de contexte, vous créez un conteneur pour encapsuler l'environnement d'exécution et effectuez la multiplication en introduisant des valeurs réelles dans les espaces réservés avec un feed_dict. Enfin, toujours dans la session, vous impression() le résultat.

Avec une exécution rapide dans TensorFlow 2.0, tout ce dont vous avez besoin est tf.multiply () pour obtenir le même résultat:

>>>

>>> importer tensorflow comme tf

>>> X = [[[[[[[[2., 4., 6.]]
>>> y = [[[[[[[[1.], [[[[3.], [[[[5.]]
>>> m = tf.multiplier(X, y)

>>> m
<tf.Tensor: shape = (3, 3), dtype = float32, numpy =
tableau ([[ 2.,  4.,  6.],
       [ 6., 12., 18.],
       [10., 20., 30.]], dtype = float32)>

Dans ce code, vous déclarez vos tenseurs en utilisant la notation de liste Python, et tf.multiply () exécute le multiplication par élément immédiatement lorsque vous l'appelez.

Si vous ne souhaitez pas ou n'avez pas besoin de créer des composants de bas niveau, la méthode recommandée pour utiliser TensorFlow est Keras. Il possède des API plus simples, regroupe les cas d'utilisation courants en composants préfabriqués pour vous et fournit de meilleurs messages d'erreur que le TensorFlow de base.

Caractéristiques spéciales

TensorFlow dispose d'une large base d'utilisateurs bien établie et d'une pléthore d'outils pour aider à la production de l'apprentissage automatique. Pour le développement mobile, il dispose d'API pour JavaScript et Swift, et TensorFlow Lite vous permet de compresser et d'optimiser les modèles pour les appareils de l'Internet des objets.

Vous pouvez commencer à utiliser TensorFlow rapidement en raison de la richesse des données, des modèles pré-entraînés et des blocs-notes Google Colab fournis par Google et des tiers.

De nombreux algorithmes et ensembles de données d'apprentissage automatique populaires sont intégrés à TensorFlow et sont prêts à être utilisés. En plus des ensembles de données intégrés, vous pouvez accéder aux ensembles de données Google Research ou utiliser la recherche d'ensembles de données de Google pour en trouver encore plus.

Keras facilite la mise en place et l'exécution des modèles, ce qui vous permet d'essayer de nouvelles techniques en moins de temps. En effet, Keras est le framework de deep learning le plus utilisé parmi les cinq équipes les plus gagnantes sur Kaggle.

Un inconvénient est que la mise à jour de TensorFlow 1.x vers TensorFlow 2.0 a changé tellement de fonctionnalités que vous pourriez vous retrouver confus. La mise à niveau du code est fastidieuse et sujette aux erreurs. De nombreuses ressources, comme des didacticiels, peuvent contenir des conseils obsolètes.

PyTorch n'a pas le même gros problème de compatibilité descendante, ce qui pourrait être une raison de le choisir plutôt que TensorFlow.

Écosystème Tensorflow

Voici quelques points forts des API, des extensions et des outils utiles de l'écosystème étendu TensorFlow:

Qu'est-ce que PyTorch?

PyTorch a été développé par Facebook et a été rendu public pour la première fois en 2016. Il a été créé pour offrir des optimisations de production similaires à TensorFlow tout en facilitant l'écriture des modèles.

Parce que les programmeurs Python l'ont trouvé si naturel à utiliser, PyTorch a rapidement gagné des utilisateurs, inspirant l'équipe de TensorFlow à adopter de nombreuses fonctionnalités les plus populaires de PyTorch dans TensorFlow 2.0.

Qui utilise PyTorch?

PyTorch a la réputation d'être plus largement utilisé dans la recherche que dans la production. Cependant, depuis sa sortie l'année après TensorFlow, PyTorch a connu une forte augmentation de son utilisation par les développeurs professionnels.

La liste de l'enquête 2020 Stack Overflow Developer Survey des «autres cadres, bibliothèques et outils» les plus populaires indique que 10,4% des développeurs professionnels choisissent TensorFlow et 4,1% choisissent PyTorch. En 2018, les pourcentages étaient de 7,6% pour TensorFlow et de seulement 1,6% pour PyTorch.

En ce qui concerne la recherche, PyTorch est un choix populaire, et les programmes d’informatique comme celui de Stanford l’utilisent désormais pour enseigner le deep learning.

Style de code et fonction

PyTorch est basé sur Torch, un framework pour faire des calculs rapides qui est écrit en C. Torch a un wrapper Lua pour construire des modèles.

PyTorch enveloppe le même backend C dans une interface Python. Mais c’est plus qu’un simple emballage. Les développeurs l'ont construit à partir de zéro pour rendre les modèles faciles à écrire pour les programmeurs Python. Le code C et C ++ de bas niveau sous-jacent est optimisé pour exécuter du code Python. Grâce à cette intégration étroite, vous obtenez:

  • Meilleure mémoire et optimisation
  • Messages d'erreur plus sensibles
  • Contrôle plus fin de la structure du modèle
  • Comportement du modèle plus transparent
  • Meilleure compatibilité avec NumPy

Cela signifie que vous pouvez écrire des composants de réseau de neurones hautement personnalisés directement en Python sans avoir à utiliser beaucoup de fonctions de bas niveau.

L'exécution rapide de PyTorch, qui évalue immédiatement et dynamiquement les opérations de tenseur, a inspiré TensorFlow 2.0, de sorte que les API des deux se ressemblent beaucoup.

La conversion d’objets NumPy en tenseurs est intégrée aux structures de données de base de PyTorch. Cela signifie que vous pouvez facilement basculer entre torche. objets et numpy.array objets.

Par exemple, vous pouvez utiliser la prise en charge native de PyTorch pour convertir des tableaux NumPy en tenseurs afin de créer deux numpy.array objets, transformez chacun en torche. objet utilisant torche.from_numpy (), puis prenez leur produit élément par élément:

>>>

>>> importer torche
>>> importer engourdi comme np

>>> X = np.tableau([[[[[[[[2., 4., 6.]])
>>> y = np.tableau([[[[[[[[1.], [[[[3.], [[[[5.]])

>>> m = torche.mul(torche.from_numpy(X), torche.from_numpy(y))

>>> m.engourdi()
tableau ([[ 2.,  4.,  6.],
       [ 6., 12., 18.],
       [10., 20., 30.]])

En utilisant torche.Tensor.numpy () vous permet d'imprimer le résultat de la multiplication matricielle, qui est un torche. objet – en tant que numpy.array objet.

La différence la plus importante entre un torche. objet et un numpy.array l'objet est que le torche. classe a différentes méthodes et attributs, tels que en arrière (), qui calcule le gradient, et la compatibilité CUDA.

Caractéristiques spéciales

PyTorch ajoute un module C ++ pour l'autodifférenciation au backend Torch. L'autodifférenciation calcule automatiquement le gradient des fonctions définies dans torche.nn pendant la rétropropagation.

Par défaut, PyTorch utilise mode avide calcul. Vous pouvez exécuter un réseau neuronal au fur et à mesure que vous le construisez, ligne par ligne, ce qui facilite le débogage. Il permet également de construire des réseaux de neurones avec une exécution conditionnelle. Cette exécution dynamique est plus intuitive pour la plupart des programmeurs Python.

Écosystème PyTorch

Voici quelques points saillants des API, extensions et outils utiles de l'écosystème étendu PyTorch:

  • L'API fast.ai, qui facilite la création rapide de modèles
  • TorchServe, un serveur de modèles open source développé en collaboration entre AWS et Facebook
  • TorchElastic pour la formation de réseaux de neurones profonds à grande échelle à l'aide de Kubernetes
  • PyTorch Hub, une communauté active pour partager et étendre des modèles de pointe

Guide de décision PyTorch vs TensorFlow

La bibliothèque à utiliser dépend de votre style et de vos préférences, de vos données et de votre modèle et de l'objectif de votre projet. Lorsque vous démarrez votre projet avec un peu de recherche sur la bibliothèque qui prend le mieux en charge ces trois facteurs, vous vous préparerez au succès!

Style

Si vous êtes un programmeur Python, PyTorch vous semblera facile à comprendre. Il fonctionne comme vous l'attendiez, dès la sortie de la boîte.

D'autre part, plus de langages de codage sont pris en charge dans TensorFlow que dans PyTorch, qui dispose d'une API C ++. Vous pouvez utiliser TensorFlow à la fois dans JavaScript et Swift. Si vous ne souhaitez pas écrire beaucoup de code de bas niveau, Keras résume de nombreux détails pour les cas d'utilisation courants afin que vous puissiez créer des modèles TensorFlow sans transpirer les détails.

Données et modèle

Quels modèles utilisez-vous? Si vous souhaitez utiliser un modèle pré-entraîné spécifique, tel que BERT ou DeepDream, vous devez rechercher avec quoi il est compatible. Certains modèles pré-entraînés sont disponibles dans une seule bibliothèque ou dans l'autre, et certains sont disponibles sur les deux. Le jardin modèle et les hubs PyTorch et TensorFlow sont également de bonnes ressources à vérifier.

De quelles données avez-vous besoin? Si vous souhaitez utiliser des données prétraitées, il se peut qu'elles soient déjà intégrées dans l'une ou l'autre bibliothèque. Consultez la documentation pour voir – cela accélérera votre développement!

Objectif du projet

Où habitera votre modèle? Si vous souhaitez déployer un modèle sur des appareils mobiles, TensorFlow est un bon pari grâce à TensorFlow Lite et à son API Swift. Pour les modèles de service, TensorFlow a une intégration étroite avec Google Cloud, mais PyTorch est intégré à TorchServe sur AWS. Si vous souhaitez participer aux compétitions Kaggle, Keras vous permettra de parcourir rapidement les expériences.

Pensez à ces questions et exemples dès le début de votre projet. Clouez les deux ou trois composants les plus importants, et TensorFlow ou PyTorch apparaîtra comme le bon choix.

Conclusion

Dans ce didacticiel, vous avez eu une introduction à PyTorch et TensorFlow, vous avez vu qui les utilise et quelles API ils prennent en charge, et vous avez appris à choisir PyTorch vs TensorFlow pour votre projet. Vous avez vu les différents langages de programmation, outils, ensembles de données et modèles pris en charge par chacun d'eux et appris à choisir celui qui convient le mieux à votre style et à votre projet.

Dans ce didacticiel, vous avez appris:

  • Quelles sont les différences entre PyTorch et TensorFlow
  • Comment utiliser tenseurs faire des calculs dans chaque
  • Quelle plateforme est meilleur pour différents types de projets
  • Quoi outils et Les données sont pris en charge par chacun

Maintenant que vous avez choisi la bibliothèque à utiliser, vous êtes prêt à commencer à créer des réseaux de neurones avec eux. Consultez les liens dans Lectures complémentaires pour des idées.

Lectures complémentaires

Les didacticiels suivants sont un excellent moyen de s'entraîner avec PyTorch et TensorFlow: