<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Machine Learning France</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/mlfrance/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/mlfrance/feed.xml</link>
    <description />
    <lastBuildDate>Tue, 16 Apr 2019 05:20:50 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Classification d’images avec le Transfer Learning</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/classification-dimages-avec-le-transfer-learning</link>
      <pubDate>Mon, 24 Dec 2018 11:36:22 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=11915</guid>
      <description><![CDATA[Selon Wikipédia, « l'apprentissage par transfert (Transfer Learning) est l'un des champs de...]]></description>
      <content:encoded><![CDATA[<p>Selon <a href="https://fr.wikipedia.org/wiki/Apprentissage_par_transfert">Wikipédia</a>, « l'apprentissage par transfert (Transfer Learning) <span style="font-family:Segoe UI;font-size:10pt">est l'un des champs de recherche de l'<a href="https://fr.wikipedia.org/wiki/Apprentissage_automatique" title="Apprentissage automatique">apprentissage automatique</a> qui vise à transférer des connaissances d'une ou plusieurs tâches sources vers une ou plusieurs tâches cibles. Il peut être vu comme la capacité d'un système à reconnaître et appliquer des connaissances et des compétences, apprises à partir de tâches antérieures, sur de nouvelles tâches ou domaines partageant des similitudes.</span> »
</p><p>Ce billet se propose d'aborder ce domaine prometteur au travers du sujet de la classification d'images comme son titre l'indique.
</p><p>Nous vous proposons de voir cela de plus prêt au travers d'une illustration. Je tiens à remercier Xiangzhe Meng actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Qu'est-ce que le Transfer Learning ?
</h1><p>Ainsi, le Transfer Learning peut se traduire dans la pratique comme une approche puissante qui permet aux utilisateurs de créer rapidement des modèles d'apprentissage profond (Deep Learning) en apprenant à partir de réseaux de neurones pré-entraînés avec de grands ensembles de données.
</p><p>Autrement dit, nous utilisons un modèle déjà bien entraîné et l'adaptons à notre propre problème. Notre nouveau modèle est pour l'essentiel basé sur les caractéristiques et les concepts appris lors de l'entraînement du modèle de base. 
</p><p>Avec un réseau de neurones convolutifs (CNN), nous utilisons les caractéristiques apprises à partir d'un ensemble des données qui est suffisamment grand, par exemple <a href="http://www.image-net.org/">ImageNet</a> qui contient 1,2 million d'images avec 1000 catégories, et retirons la dernière couche de classification en la remplaçant par une nouvelle couche dense prédisant les étiquettes de classe de notre nouveau domaine.
</p><h1>Pourquoi le Transfer Learning ?
</h1><p>Le Transfer Learning s'avère une technique utile lorsque nous devons classifier certaines images dans différentes catégories, mais que nous ne disposons pas de suffisamment de données pour entraîner un réseau de neurones profonds (DNN) à partir de rien. 
</p><p>En effet, l'entraînement des DNNs nécessite beaucoup de données, toutes étiquetées. Cependant, nous ne disposons pas toujours de ce type de données. Si notre problème est similaire à celui pour lequel un réseau de neurones a déjà été entraîné, nous pouvons utiliser le Transfer Learning pour modifier ce réseau de neurones en fonction de notre problème avec une fraction des images étiquetées nécessaire : nous parlons maintenant de dizaines au lieu de milliers des images.
</p><p>Il convient de souligner, qu'au-delà de la reconnaissance d'images qui sera notre illustration dans la suite de ce billet, le Transfer Learning est également utilisé avec succès pour adapter les modèles de réseau de neurones existants à la traduction, à la synthèse de la parole et à de nombreux autres domaines. Le Transfer Learning est ainsi notamment utilisé dans la cybersécurité comme en témoigne la session « <a href="https://www.rsaconference.com/videos/transfer-learning-repurposing-ml-algorithms-from-different-domains-to-cloud-defense">Transfer Learning: Repurposing ML Algorithms from Different Domains to Cloud Defense</a> » de Mark Russinovich, Directeur technique Azure, lors la dernière conférence RSA en avril dernier.
</p><h1>Comment fonctionne Transfer Learning ?
</h1><p>La figure ci-dessous illustre le principe du Transfer Learning. Le modèle de l'étudiant est initialisé en copiant les N-1 premières couches de l'enseignant. Une nouvelle couche dense est ajoutée pour la classification. Sa taille correspond au nombre de classes dans la tâche d'étudiant. Le modèle de l'étudiant est ensuite entraîné en utilisant son propre jeu de données, tandis que les K premières couches sont « gelées », c'est-à-dire que leurs poids sont fixes et que seuls les poids des N-K couches sont mis à jour.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat1.png" alt="" />
	</p><p>Les K premières couches sont « gelées » au cours de l'entraînement, parce que les sorties de ces couches représentent déjà des caractéristiques significatives pour la tâche de l'étudiant. Le modèle de l'étudiant peut réutiliser directement ces caractéristiques ; ce qui peut réduire à la fois les coûts de l'entraînement et la quantité de données requises.
</p><p>En fonction du nombre de couches gelées (K) pendant le processus de l'entraînement, le Transfer Learning est classifié dans les trois types suivants :
</p><ul><li><div style="text-align: justify"><strong>Extracteur de caractéristiques de couches profondes</strong> (Deep-layer Feature Extractor) :
</div><p>N-1 couches sont gelées pendant l'entraînement du modèle de l'étudiant et seule la dernière couche de classification est mise à jour. Ceci est préférable lorsque la tâche de l'étudiant est très similaire à la tâche de l'enseignant et qu'elle nécessite un coût de l'entraînement minimal.
</p></li><li><div style="text-align: justify"><strong>Extracteur de caractéristiques de couche intermédiaire</strong> (Mid-layer Feature Extractor) :
</div><p>Les K premières couches sont gelées, où K &lt; N -1. En général, l'extracteur de caractéristiques de couche intermédiaire se montre plus performant que l'extracteur de caractéristiques de couches profondes dans les scénarios où la tâche de l'étudiant diffère plus de la tâche de l'enseignant et où plus de données d'apprentissage sont disponibles. En permettant à plus de couches d'être mises à jour, l'étudiant optimisera mieux sa propre tâche.
</p></li><li><div style="text-align: justify"><strong>Extracteur de caractéristiques de réglage</strong> (Full Model Fine-tuning) :
</div><p>Toutes les couches sont dégelées et ajustées pendant l'entraînement du modèle de l'étudiant (K = 0). Cela nécessite beaucoup plus de données d'apprentissage et est approprié lorsque la tâche de l'étudiant diffère de manière significative de la tâche de l'enseignant.
</p></li></ul><p>En général, l'entraînement avec les poids de modèle de l'enseignant permet au modèle de l'étudiant de converger plus rapidement et d'obtenir potentiellement de meilleures performances que d'entraîner à partir de zéro.
</p><h1>L'outillage
</h1><p>Aujourd'hui, de plus en plus de plates-formes de Machine Learning et de bibliothèques de Deep LeEarning commencent à recommander le Transfer Learning à leurs utilisateurs. Beaucoup d'entre elles proposent à cet effet des tutoriels détaillés pour guider les utilisateurs dans le processus de Transfer Learning.
</p><p>C'est en particulier le cas de notre bibliothèque <a href="https://github.com/microsoft/cntk">Microsoft Cognitive Toolkit (CNTK)</a>, une bibliothèque de Deep Learning open source déjà abordée sur ce même blog que nous utiliserons dans la suite de ce billet pour notre illustration et pour construire notre modèle de Transfer Learning.
</p><p>Le tutoriel « <a href="https://docs.microsoft.com/en-us/cognitive-toolkit/Build-your-own-image-classifier-using-Transfer-Learning">Build your own image classifier using Transfer Learning</a> » de CNTK décrit une tâche de classification des fleurs et recommande le modèle ResNet_18 comme le modèle de base et « Full Model Fine-tuning » comme la configuration par défaut. 
</p><p>CNTK fournit également des paramètres de contrôle pour passer en mode « Deep-layer Feature Extractor ». Cependant, le mode « Mid-layer Feature Extractor » n'est pas (encore) disponible à ce stade.
</p><p>En termes d'outillage, d'aucun pourrait également citer <a href="https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html">PyTorch</a> ou d'autres bibliothèques encore. 
</p><h1>Notre illustration
</h1><p>Le but de notre illustration consiste à créer un pipeline de classification d'images avec le Transfer Learning. Ainsi, nous nous proposons de construire un modèle de Transfer Learning pour classifier les images de cinq sortes de fruits : pomme, banane, raisin, orange, fraise.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat2.png" alt="" />
	</p><p>Nous allons pour cela suivre les 8 étapes ci-dessous :
</p><ol><li><div style="text-align: justify">Créer des dossiers en respectant une structure spécifique.
</div></li><li><div style="text-align: justify">Obtenir des données (images) (optionnel).
</div></li><li><div style="text-align: justify">Télécharger et consulter les modèles de base.
</div></li><li><div style="text-align: justify">Définir les paramètres généraux et choisir le type de Transfer Learning à utiliser.
</div></li><li><div style="text-align: justify">Entraîner le modèle.
</div></li><li><div style="text-align: justify">Évaluer le modèle avec une seule image.
</div></li><li><div style="text-align: justify">Évaluer le modèle avec un groupe d'images.
</div></li><li><div style="text-align: justify">Afficher les images mal-classifiées.
</div></li></ol><p style="text-align: justify">Voyons ce qu'il en est dans le détail.
</p><p><strong>Le code source et le pipeline complet sont disponibles dans un Jupyter Notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/4b72b182acb09331666e2148c1a8db3a">ici</a>. </strong>Vous disposez ainsi de tous les éléments nécessaires pour reproduire ce qui suit ;-)
</p><h2>1. Créer des dossiers en respectant une structure spécifique
</h2><p>Afin de réutiliser le pipeline de classification d'images proposé, vous devez commencer par créer des dossiers selon une structure spécifique et placer nos données (images) dans les dossiers correspondants. 
</p><p>L'approche proposée dans le cahier Jupyter Notebook vise à créer ces dossiers automatiquement. Il reste simplement à définir le nom du jeu de données et des classes différentes pour la tâche.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat3.png" alt="" />
	</p><p>Voici la structure de dossiers utilisée ainsi pour ce pipeline de classification d'images :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat4.png" alt="" />
	</p><h2>2. Obtenir des données (images) (optionnel)
</h2><p>Cette seconde étape est une étape optionnelle. 
</p><p>Si nous voulons essayer ce pipeline de classification d'images sans cible spécifique, il est possible de simplement définir le nombre total d'images à télécharger et la partition des images pour chaque classe. Ensuite, il suffit de lancer le programme de téléchargement, qui téléchargera automatiquement les images à partir de la <a href="https://github.com/hardikvasa/google-images-download">bibliothèque Google Image</a> sur GitHub, séparera ces images de manière aléatoire en deux groupes (ensemble des données d'apprentissage et de test) et les stockera dans les dossiers correspondants précédemment créés.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat5.png" alt="" />
	</p><p><strong>Remarque</strong> : Les mots-clés de recherche que nous utilisons pour télécharger des images à partir de Google sont les noms de classe définis dans la partie précédente. Dans notre cas, les mots-clés de recherche sont donc pomme, banane, raisin, orange, fraise.
</p><p>Voici un exemple de l'exécution pour télécharger les images :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat6.png" alt="" />
	</p><h2>3. Télécharger et consulter les modèles de base
</h2><p>Avant d'entraîner notre modèle de Transfer Learning, nous devons télécharger le modèle de base que nous nous proposons d'utiliser et choisir les couches que nous allons conserver en inspectant la structure des réseaux de neurones.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat7.png" alt="" />
	</p><h2>4. Définir les paramètres généraux et choisir le type de Transfer Learning à utiliser
</h2><p>Avant d'exécuter notre programme de l'entraînement, il est nécessaire de :
</p><ol><li><div style="text-align: justify">Définir les paramètres généraux liés au processus d'apprentissage, aux propriétés de l'image d'entrée, et aux emplacements et caractéristiques du modèle et des données.
</div></li><li><div style="text-align: justify">Choisir les types de Transfer Learning.
</div></li></ol><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat8.png" alt="" />
	</p><p>CNTK supporte à date les modes « Deep-layer Feature Extractor » et « Full Model Fine-tuning » comme évoqué précédemment. Nous devons donc choisir l'un de ces deux modes :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat9.png" alt="" />
	</p><h2>5. Entraîner le modèle
</h2><p>Pour cette illustration, nous avons choisi ResNet_18 comme le modèle de base. 
</p><p>Ce modèle sera adapté à l'aide du Transfer Learning pour la classification des fruits. Ce modèle est un réseau de neurones convolutifs (CNN) construit à l'aide de techniques de réseau résiduel. Les réseaux de neurones convolutifs construisent des couches de convolutions, transforment une image d'entrée et la distillent jusqu'à ce qu'ils commencent à reconnaître les caractéristiques composites. Avec des couches de convolutions plus profondes, ils peuvent même reconnaître des caractéristiques complexes.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat10.png" alt="" />
	</p><p>Le réseau résiduel est une <a href="https://github.com/KaimingHe/deep-residual-networks">technique issue de Microsoft Research (MSR)</a>. Il consiste à passer par le signal principal des données d'entrée, de sorte que le réseau finisse par apprendre uniquement sur les portions résiduelles qui diffèrent d'une couche à l'autre. Dans la pratique, cela permet d'entraîner des réseaux beaucoup plus profonds en évitant les problèmes qui entravent la descente de gradient sur des réseaux plus vastes. Ces cellules contournent les couches de convolution et reviennent plus tard avant ReLU.
</p><h2>6. Évaluer le modèle avec une seule image
</h2><p>Nous avons deux façons d'évaluer notre modèle. Tout d'abord, nous l'évaluons avec une image choisie et montrons la prédiction avec les probabilités de chaque classe comme ci-dessous.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat11.png" alt="" />
	</p><h2>7. Évaluer le modèle avec un groupe d'images
</h2><p>Après avoir collecté toutes les images de test, nous pouvons également évaluer notre modèle avec toutes ces images une par une, placer la prédiction avec les probabilités de chaque classe dans une table et calculer la précision de la classification.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat12.png" alt="" />
	</p><h2>8. Afficher les images mal-classifiées
</h2><p>Après avoir évalué les modèles avec l'ensemble des données de test, nous pouvons afficher toutes les prédictions erronées afin de trouver une raison potentielle concernant la classification erronée de ces images. 
</p><p>Dans notre cas, par exemple, l'image ci-dessous est mal classifiée car les formes de pomme et d'orange sont assez similaires et ils peuvent avoir la même couleur (verte). C'est peut-être une des raisons pour lesquelles cette image orange est reconnue comme une pomme.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/12/122418_1135_Classificat13.png" alt="" />
	</p><h1>En guise de conclusion
</h1><p>Le Transfer Learning est une approche puissante. Cependant, il a aussi des limites. 
</p><p>Par exemple, nous avons ré-entraîné un modèle qui avait été entraîné sur les images de ImageNet. Cela signifie qu'il connaissait déjà les images et avait une bonne idée des concepts allant du niveau bas (rayures, cercles etc.) au niveau élevé (les petits points sur la surface de fraise etc.). 
</p><p>Ré-entraîner un tel modèle pour classifier les fruits a du sens, mais le ré-entraîner pour détecter les véhicules à partir d'images aériennes serait plus difficile. Nous pouvons toujours utiliser le Transfer Learning dans ces cas, mais il vaut mieux de réutiliser juste les couches précédentes du modèle, c'est-à-dire les couches convolutifs qui ont appris des concepts plus primitifs. Nous aurons donc probablement besoin de beaucoup plus de données d'apprentissage.
</p>]]></content:encoded>
    </item>
    <item>
      <title>Vous avez dit AutoML avec Azure Machine Learning ?</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/vous-avez-dit-automl-avec-azure-machine-learning</link>
      <pubDate>Fri, 26 Oct 2018 09:01:05 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=11655</guid>
      <description><![CDATA[Nous l'évoquions dans un précédent billet sur ce même blog, le Service Azure Machine Learning peut...]]></description>
      <content:encoded><![CDATA[<p><img src="https://msdnshared.blob.core.windows.net/media/2018/10/102618_0909_Vousavezdit1.png" alt="" />
	</p><p>Nous l'évoquions dans un <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/10/17/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-1ere-partie/">précédent billet</a> sur ce même blog, le <a href="https://azure.microsoft.com/fr-fr/services/machine-learning-service/">Service Azure Machine Learning</a> peut effectuer le prétraitement des données, la sélection d'algorithmes et l'optimisation intelligente des hyperparamètres de manière automatisée avec la version préliminaire d'AutoML (Automated Machine Learning). 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/10/102618_0909_Vousavezdit2.png" alt="" />
	</p><p>L'idée derrière ce composant AutoML est simple à comprendre et complexe à implémenter. Ceci nous renvoie à la publication de recherche <a href="https://arxiv.org/abs/1705.05355">Probabilistic Matrix Factorization for Automated Machine Learning</a> sur arXiv.org.
</p><p><strong>AutoML construit pour vous des modèles de Machine Learning de haute qualité en automatisant le modèle et la sélection des hyperparamètres.</strong>
	</p><p>Apportez un ensemble de données étiquetées pour lequel vous souhaitez créer un modèle, AutoML vous donnera alors un modèle de Machine Learning de haute qualité que vous pouvez utiliser pour les prédictions.
</p><p>Si vous êtes nouveau en Data Science, AutoML vous aidera à démarrer en simplifiant la construction de modèle de Machine Learning. AutoML vous soustrait de la nécessité d'effectuer la sélection du modèle, de celle des hyperparamètres et en une seule étape crée un modèle de haute qualité dûment entrainé pour vous prêt à être utilisé.<span style="font-family:Times New Roman">
		</span></p><p>Si vous êtes un data scientist expérimenté, AutoML vous aide à augmenter votre productivité en effectuant intelligemment pour vous la sélection du modèle et des hyperparamètres pour votre entrainement et génère des modèles de haute qualité beaucoup plus rapidement qu'en spécifiant manuellement plusieurs combinaisons des paramètres et en exécutant des jobs d'entrainement. AutoML fournit la visibilité et l'accès à tous les jobs d'entrainement ainsi qu'aux caractéristiques de performance des modèles pour vous aider à affiner le pipeline si vous le désirez.<span style="font-family:Times New Roman">
		</span></p><p>Nous vous proposons de voir cela de plus prêt au travers d'une illustration à l'occasion de ce billet. 
</p><p>Je tiens à remercier Xiangzhe Meng actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Cadre et déroulé de l'illustration
</h1><p>Comme mentionné ci-avant, cette illustration a pour but de montrer comment utiliser la technique AutoML afin de trouver le meilleur modèle en fonction de notre critère.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/10/102618_0909_Vousavezdit3.png" alt="" />
	</p><p>Nous réutilisons ici pour cela le jeu de données « <a href="https://www.kaggle.com/c/nyc-taxi-trip-duration">New York City Taxi Trip Duration</a> »<strong>
		</strong>du <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/10/17/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-2nde-partie/">billet précédent</a> pour dérouler notre illustration avec un bénéfice à la clé : la capacité de pouvoir comparer le résultat avec celui généré par notre propre modèle dans la précédente illustration. Ceci nous permettra donc d'évaluer concrètement les performances de cette technique au-delà de ce qui décrit en introduction ;-)
</p><p>Le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/caed1b650321393ab584fddd1c87fe7b">Train an automated machine learning model.ipynb</a> contient toutes les procédures qu'il est nécessaire de suivre pour entraîner un modèle en utilisant la technique AutoML.
</p><p>Nous pouvons entraîner le modèle non seulement <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/caed1b650321393ab584fddd1c87fe7b">en local</a> mais aussi <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/caed1b650321393ab584fddd1c87fe7b">avec une machine virtuelle Science des données (ou DSVM pour Data Science Virtual Machine) distante</a>. 
</p><p>Une fois le meilleur modèle trouvé, nous pouvons le déployer en suivant les mêmes procédures que celles présentées dans le billet précédent via le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/dd43371bc6d246ef3c295c38246c1725">Deploy models.ipynb</a>.
</p><p>A l'issue de l'ensemble de ces opérations, nous observons que le résultat obtenu avec AutoML est conforme à l'attente ! sic, en nous mettant à disposition un meilleur modèle que celui généré lors de la précédente illustration (Light GBM Regressor avec la corrélation de Spearman 0,711, ce qui est plus élevée que celle du modèle entraîné par nous-mêmes : Linear Regressor 0,683).
</p><p>Ainsi, une telle technique peut être utilisée à notre avis pour valider les modèles déjà sélectionnés et optimisés par nous-même. De plus, nous pouvons même obtenir un meilleur modèle que nous n'avions pas envisagé avant de tester avec cette technique.
</p><h1>Pour aller plus loin
</h1><p><span style="background-color:white">Nous espérons que cette illustration vous aura donné envie d'approfondir le sujet. 
</span></p><p><span style="color:#333333;background-color:white">A ce propos, il nous parait pertinent de (re-)mentionner le billet <a href="https://azure.microsoft.com/en-us/blog/announcing-automated-ml-capability-in-azure-machine-learning/">Release models at pace using Microsoft's automated machine learning!</a> ainsi que les trois liens suivants dans la documentation en ligne :
</span></p><ol><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/azure/machine-learning/service/tutorial-auto-train-models">Didacticiel : Entraînement d'un modèle de classification par Machine Learning automatisé dans le service Azure Machine Learning</a>.
</div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-train-automl/azureml.train.automl.automlconfig.automlconfig?view=azure-ml-py">Classe AutoMLConfig</a>. Cette classe est utilisée dans le but de soumettre une expérimentation AutoML au service Azure Machine Learning. Cet objet contient tous les paramètres de configuration ainsi que les données à utiliser lors de l'exécution.
</div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/azure/machine-learning/service/how-to-tune-hyperparameters">Optimiser les hyperparamètres pour votre modèle</a>.
</div></li></ol><p>Autre point à souligner, vous trouverez au sein de la collection de notebooks Machine Learning mise à disposition sur le repo <a href="https://github.com/Azure/MachineLearningNotebooks/tree/master/automl">Azure/MachineLearningNotebooks</a> sur la forge GitHub toute une série de proposition sur AutoML <a href="https://github.com/Azure/MachineLearningNotebooks/tree/master/automl">ici</a>.
</p><p>Nous souhaitons enfin conclure ce billet en mentionnant la disponibilité du <a href="https://github.com/Microsoft/nni">toolkit NNI (Neural Network Intelligence)</a> sur GitHub, un toolkit en open-source pour l'AutoML qui correspond à un autre investissement de Microsoft dans le domaine très populaire aujourd'hui de l'AutoML.</p>]]></content:encoded>
    </item>
    <item>
      <title>Une introduction aux nouveaux SDKs d’Azure Machine Learning – 2nde partie</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-2nde-partie</link>
      <pubDate>Wed, 17 Oct 2018 14:22:55 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=11425</guid>
      <description><![CDATA[La première partie de ce billet s'est intéressée à l'introduction des nouveaux kits de...]]></description>
      <content:encoded><![CDATA[<p>La <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/10/17/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-1ere-partie/">première partie de ce billet</a> s'est intéressée à l'introduction des nouveaux kits de développements (SDKs) d'Azure Machine Learning. Cette seconde partie vise de son côté à illustrer les fonctionnalités ainsi offertes par ces SDKs et ce, au travers d'une mise en situation visant à offrir une illustration de bout-en-bout.
</p><p>Cette illustration s'appuie sans surprise sur des notebooks Jupyter ; ce que rendent justement possible ces nouveaux SDKS comme cela a été souligné. 
</p><p>Je tiens à remercier Xiangzhe Meng actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Cadre de l'illustration
</h1><p>L'exemple retenu pour les besoins de cette illustration correspond dans la pratique directement au projet de la compétition « <a href="https://www.kaggle.com/c/nyc-taxi-trip-duration"><strong>New York City Taxi Trip Duration</strong></a><strong> » </strong>organisé par Kaggle il y a un peu plus d'un an.
</p><p>Le but du projet consistait à prévoir la durée de chaque trajet en fonction de ses attributs propres ; ce à quoi nous allons nous atteler.
</p><p>Avant cela, arrêtons-nous un instant sur le jeu de données utilisé.
</p><h2>Description des données
</h2><p><img src="https://msdnshared.blob.core.windows.net/media/2018/10/101818_0742_Uneintroduc1.png" alt="" />
	</p><p>Le jeu de données a été publié à l'origine par la <a href="http://www.nyc.gov/html/tlc/html/home/home.shtml">NYC Taxi and Limousine Commission (TLC)</a>. 
</p><p>Celui-ci est composé de 1458644 lignes et 11 colonnes. Chaque ligne représente un enregistrement de trajet.
</p><p>Un enregistrement contient 11 informations concernant un trajet donné comme suit :
</p><ul><li><strong>id</strong> – Identifiant du trajet
</li><li><strong>vendor_id</strong> – Identifiant de la compagnie de taxi
</li><li><strong>pickup_datetime</strong> - Date et heure auxquelles le compteur a été engagé
</li><li><strong>dropoff_datetime</strong> - Date et heure auxquelles le compteur a été désengagé
</li><li><strong>passenger_count</strong> – Nombre de voyageur dans le taxi
</li><li><strong>pickup_longitude</strong> - Longitude où le compteur a été engagé
</li><li><strong>pickup_latitude</strong> - Latitude où le compteur a été engagé
</li><li><strong>dropoff_longitude</strong> - Longitude où le compteur a été désengagé
</li><li><strong>dropoff_latitude</strong> - Latitude où le compteur a été dégagé
</li><li><strong>store_and_fwd_flag</strong> - Drapeau pour indiquer si  cet enregistrement a déjà été enregistré dans le mémoire du taxi avant d'envoyer à la compagnie de taxi : Y = oui, N = non
</li><li><strong>trip_duration</strong> – Durée du trajet
</li></ul><h2>Prérequis technique pour cette illustration
</h2><p>De façon à pouvoir reproduire l'illustration, il est nécessaire au préalable d'avoir réalisé les opérations suivantes :
</p><ol><li><strong>Créer un compte Azure</strong>. Si vous ne disposez pas d'un compte Azure, il vous est possible de créer un compte gratuit Azure <a href="https://azure.microsoft.com/fr-fr/free/?WT.mc_id=A261C142F">ici</a>.
</li><li><div><strong>Créer un espace de travail Azure Machine Learning</strong> comme décrit <a href="https://docs.microsoft.com/fr-fr/azure/machine-learning/service/quickstart-get-started">ici</a>. Pour mémoire, un espace de travail est le conteneur logique de tous vos actifs, ainsi que la limite de sécurité et de partage.
</div><p>Une fois que vous avez créé un espace de travail, vous pouvez accéder à un ensemble riche de capacités via les SDKs en Python. C'est justement l'objet du point suivant.
</p></li><li><strong>Configurer un environnement de développement et installer les SDKs d'Azure Machine Learning</strong>. Vous pouvez les installer avec une simple commande pip install, ou de préférence au sein d'un environnement virtuel <a href="https://conda.io/docs/index.html" target="_blank">Conda</a> isolé.
</li></ol><p>Deux environnements de développement sont recommandés :
</p><ul><li><div><strong>Jupyter Notebook en local sur votre ordinateur</strong>. <a href="https://jupyter.org/">Jupyter notebook</a> est devenu l'un des outils les plus populaires pour la science des données ou data science en raison de de sa nature auto-documentée et de son interactivité. 
</div><p>Si vous souhaitez utiliser Jupyter notebook en local sur votre ordinateur, il est recommandé d'utiliser <a href="https://www.anaconda.com/download">Anaconda</a> pour isoler votre environnement de travail afin d'éviter les conflits de dépendance entre les packages. 
</p><p>Le tutoriel <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-configure-environment">ici</a> vous permet pour configurer Jupyter Notebook sur votre propre ordinateur.
</p><p><span style="color:black"><strong>Remarque</strong></span> : Si la version de Conda est inférieure ou égale à 4.4, il faut utiliser <span style="font-family:Consolas">activate &lt;nom_env&gt; </span>pour activer le nouvel environnement et <span style="font-family:Consolas">deactivate &lt;nom_env&gt;</span> pour le désactiver.
</p><p>Pour installer le SDK <span style="color:black">de préparation des données d'Azure Machine Learning en Python</span>, il faudra utiliser la commande suivante :
</p></li></ul><p style="text-align: center"><span style="font-family:Consolas">pip  install  - -upgrade  azureml-dataprep
</span></p><ul><li><div><strong>Azure Notebooks dans Azure</strong>. <a href="https://aka.ms/aml-clone-azure-notebooks">Azure Notebooks</a> est un service Jupyter Notebook dans le cloud Azure. Azure Notebooks est préconfiguré pour fonctionner avec le <a href="https://azure.microsoft.com/fr-fr/services/machine-learning-service/">Service Azure Machine Learning</a>. 
</div><p>Les composants requis, tels que les SDK d'Azure Machine Learning en Python, sont préinstallés sur cet environnement. On peut donc utiliser directement Azure Notebooks comme l'environnement de développement sans avoir besoin de la configuration.
</p></li></ul><p>L'objet de l'illustration et le jeu de donnée étant introduit, et l'environnement d'exécution pour les SDKs d'Azure Machine Learning à priori en place ou supposé comme tel, venons-en à notre flux de travail de Machine Learning à proprement parler, avec deux grands temps :
</p><ul><li>La nécessaire préparation des données.
</li><li>L'entraînement et le déploiement du modèle.
</li></ul><p>De façon à nous inscrire directement dans la philosophie de ces SDKs que nous souhaitons illustrer, nous nous sommes directement appuyés sur différentes bloc-notes ou notebooks Jupyter.
</p><p>Il vous sera d'autant plus facile de reproduire l'illustration de bout-en-bout ! ;-)
</p><p><strong>Tous ces notebooks Jupyter sont directement accessibles depuis un repo GitHub créé pour la circonstance : <a href="https://github.com/xiangzhemeng/Demo-Azure-Machine-Learning-SDKs">https://github.com/xiangzhemeng/Demo-Azure-Machine-Learning-SDKs</a>
		</strong></p><h1>Préparation des données
</h1><p>Le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/468742107f3ee2fa5c6cd9b8ec14fc75">Data preparation.ipynb</a> contient tous les pré-traitements et les « feature engineerings » que l'on réalise avec les données « brutes ». 
</p><p>Comme vous pouvez le constater au travers des codes et des descriptions associées, nous utilisons ici le SDK de préparation des données d'Azure Machine Learning en Python principalement pour charger et transformer les données.
</p><p>Cependant, pour le côté visualisation des données, nous nous reposons plutôt sur d'autres bibliothèques, comme par exemple <a href="https://matplotlib.org/">Matplotlib</a>, <a href="https://seaborn.pydata.org/">Seaborn</a> et <a href="https://pypi.org/project/folium/">Folium</a>, comme le SDK de préparation des données d'Azure Machine Learning ne fournit pas la fonctionnalité de visualisation de données, du moins pour le moment.
</p><p>En même temps, la nouvelle philosophie adoptée prend ici tout son sens en tirant parti pleinement de l'écosystème Python.
</p><h1>Entraînement et déploiement du modèle
</h1><p>Pour entraîner le modèle avec le service Azure Machine Learning, il est nécessaire, dans un premier temps, de créer un fichier de configuration d'espace de travail avec le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/402c487ebd9063d466061c0bbcafc837">Create workspace config file.ipynb</a> et de récupérer les données à partir du <a href="https://azure.microsoft.com/fr-fr/services/storage/">Stockage Azure</a> avec le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/0579aa229ad52afdf8cd555670324f97">Download Data from Azure Storage.ipynb</a>.
</p><p><span style="color:black"><strong>Remarque</strong> </span>: Le Stockage Azure est un service fournissant un stockage en cloud qui est hautement sécurisé, durable, et évolutif. Azure Storage inclut Azure Blobs (objets), Azure Data Lake Storage Gen2, Fichiers Azure, etc. Dans notre cas, on utilise Azure Blobs pour stocker les données. L'Azure Blob est la solution de stockage d'objets pour le Cloud. Le stockage d'objets blob est optimisé pour stocker des quantités énormes de données non structurées.
</p><p><span style="color:black"><strong>Remarque</strong> </span>: Si le volume des données n'est pas très grand, on n'a pas vraiment besoin d'utiliser le Stockage Azure. On peut directement les charger à partir de notre propre ordinateur.
</p><p>Nous entrainons dans un second temps le modèle avec deux types de machines virtuelles :
</p><ul><li><div><strong>Entraînement avec des machines virtuelles Science des données </strong>(ou DSVM pour Data Science Virtual Machine) via le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/220b58e33220352da99140544a7ac1bf">Train models with DSVM.ipynb</a>. 
</div><p>Les DSVMs sont des images de machines virtuelles pre-installées, configurée et testées pour les travaux de Data Science. Ces machines virtuelles comprennent des outils, des IDEs et des packages populaires tels que Jupyter Notebook, PyCharm et <a href="https://www.tensorflow.org/">Tensorflow</a>. 
</p><p>Les composants requis pour notre illustration, tels que les SDKs d'Azure Machine Learning en Python, sont également préinstallés sur cet environnement.
</p></li><li><div><strong>Entraînement avec un « cluster » de machines virtuelles</strong> à priorité basse via le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/cf0a80a1c99b6a8dadfea4250921b3a7">Train models with Batch.ipynb</a>. 
</div><p><a href="https://azure.microsoft.com/fr-fr/services/batch/">Azure Batch</a> propose des machines virtuelles à faible priorité pour réduire le coût des charges de travail par lots. Les machines virtuelles à faible priorité permettent de nouveaux types de charges de travail par lots en utilisant une grande quantité de puissance de calcul à un coût très bas. Les machines virtuelles à faible priorité tirent parti de la surcapacité dans Azure. 
</p><p>Le « trade-off » pour utiliser des machines virtuelles à faible priorité est que ces machines peuvent ne pas être disponibles pour être alloués ou peuvent être préemptés à tout moment, en fonction de la capacité disponible.
</p></li></ul><p>Enfin, en dernier lieu, nous utilisons le notebook <a href="https://nbviewer.jupyter.org/gist/xiangzhemeng/dd43371bc6d246ef3c295c38246c1725">Deploy models.ipynb</a> pour déployer le modèle sous la forme d'un service web. 
</p><p>Un web service est une image, dans notre cas une image Docker, qui encapsule la logique de « scoring » et le modèle lui-même.
</p><h1>En guise de conclusion
</h1><p>Nous espérons que cette illustration vous aura permis de découvrir les nouveaux SDKs d'Azure Machine Learning récemment introduits et donné envie d'aller plus loin avec pour vos flux de travail de Machine Learning.
</p><p>A ce propos, nous souhaitons mentionner un autre repo GitHub crée par l'équipe Azure Machine Learning au sein du Support Premier de Microsoft : <a href="https://github.com/Azure/AMLSamples">https://github.com/Azure/AMLSamples</a>
	</p><p>Vous y trouverez toute une série de cas d'usages qui vous permettront d'approfondir votre connaissance et la maitrise de ces SDKs.
</p><p>Dernier point et non des moindres à ce propos, ce repo est destiné à :
</p><ul><li>Être alimenté avec diverses illustrations en fonction des demandes reçues au niveau de support. 
</li><li>Recevoir les notebooks Jupyter mis à jour pour l'article <a href="https://docs.microsoft.com/fr-fr/azure/machine-learning/desktop-workbench/scenario-predictive-maintenance">Maintenance prédictive pour scénarios réels</a><span style="color:black">.</span>
		</li></ul><p><strong>L'objectif, vous l'aurez compris, est aussi de vous faciliter le cas échéant la migration de vos contenu Workbench vers ces niveaux SDKs d'Azure Machine Learning en Python.
</strong></p>]]></content:encoded>
    </item>
    <item>
      <title>Une introduction aux nouveaux SDKs d’Azure Machine Learning – 1ère partie</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-1ere-partie</link>
      <pubDate>Wed, 17 Oct 2018 14:16:01 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=11375</guid>
      <description><![CDATA[La récente conférence Microsoft Ignite 2018 qui s'est tenue à la fin du mois de septembre dernier a...]]></description>
      <content:encoded><![CDATA[<p style="text-align: justify">La récente conférence Microsoft Ignite 2018 qui s'est tenue à la fin du mois de septembre dernier a été riche en annonces. C'est le moins que l'on puisse dire comme en témoigne le <a href="https://news.microsoft.com/uploads/prod/sites/507/2018/09/IGNITEBOOKOFNEWS-5ba95469d658b.pdf">« Book of News » de Microsoft Ignite 2018</a>  qui reprend l'ensemble des annonces faites.
</p><p style="text-align: center">
		<a href="https://news.microsoft.com/uploads/prod/sites/507/2018/09/IGNITEBOOKOFNEWS-5ba95469d658b.pdf"><img src="https://msdnshared.blob.core.windows.net/media/2018/10/101818_0807_Uneintroduc1.png" alt="" border="0" /></a>
	</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/10/101818_0807_Uneintroduc2.png" alt="" />
	</p><p>Le <a href="https://azure.microsoft.com/fr-fr/services/machine-learning-service/">Service Azure Machine Learning</a> - qui a fait l'objet de toute une série de billets sur ce blog depuis le <a href="https://azure.microsoft.com/en-us/blog/diving-deep-into-what-s-new-with-azure-machine-learning/">lancement de sa version préliminaire publique en septembre 2017</a> à l'occasion de la précédente édition de cette même conférence Ignite - n'y fait pas exception et continue d'évoluer :-) pour toujours mieux répondre à l'attente des scientifiques des données ou data scientists. La section § 2.1.3 « New Azure Machine Learning capabilities » du livret précédent lui est dédiée.
</p><p>Si, au chapitre de de ces évolutions, nous trouvons de nouvelles mises à jour importantes du service qui incluent : 
</p><ul><li>le <a href="https://azure.microsoft.com/en-us/blog/announcing-automated-ml-capability-in-azure-machine-learning/">Machine Learning automatisé</a> afin d'identifier les algorithmes les plus efficaces et optimiser les performances du modèle, 
</li><li>dans le même registre, l'<a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-tune-hyperparameters">optimisation intelligente des hyperparamètres</a>, 
</li><li>des modèles supplémentaires bénéficiant d'une <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/concept-accelerate-with-fpgas">accélération matérielle pour les FPGAs (Field-Programmable Gate Arrays)</a> pour des scénarios de reconnaissance et de classification d'images à très haute vitesse et à faible coût,
</li></ul><p>Nous avons souhaité mettre l'accent l'espace de ce billet – comme son titre l'indique – sur les nouveaux <a href="http://aka.ms/aml-sdk">kits de développements (SDKs) en Python</a> qui rendent ainsi le Service Azure Machine Learning accessible à partir des environnements de développement intégrés (IDEs) et autres notebooks populaires de Python.
</p><p>Une question se pose alors de prime abord : <em>Qu'advient-il de l'application Azure Machine Learning Workbench ?
</em></p><h1>À propos d'Azure Machine Learning Workbench…
</h1><p>Dans la pratique, si les fonctions principales d'Azure Machine Learning allant des expérimentations au déploiement du modèle n'ont pas fondamentalement changé è à certains ajouts près, l'application Azure Machine Learning Workbench et certaines autres fonctionnalités antérieures se trouvent désormais dépréciées dans la version de septembre 2018.
</p><p>Cette évolution vise à améliorer au final l'architecture d'Azure Machine Learning et les flux de travail associés comme décrits dans l'article <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/concept-azure-machine-learning-architecture">Architecture and concepts: How does Azure Machine Learning service work?</a>.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/10/101818_0807_Uneintroduc3.png" alt="" />
	</p><p style="text-align: justify">Les SDKs que nous allons aborder tout de suite après ainsi qu'une nouvelle <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/reference-azure-machine-learning-cli">extension Azure CLI (Command Line Interface) pour le Machine Learning</a> permettent d'accomplir concrètement toutes nos tâches de Machine Learning et pipelines qu'il était possible de réaliser au travers de l'application Azure Machine Learning Workbench.
</p><p style="text-align: justify">Si l'on revient un instant sur les récentes innovations en matière de Machine Learning, la plupart d'entre elles se produisent dans la sphère du langage Python. C'est pourquoi Microsoft a fait le choix d'exposer les fonctionnalités clé du service via un SDK Python et de façon à pouvoir bénéficier pleinement de tout l'écosystème associé.
</p><p style="text-align: justify">Pour plus d'informations, vous pouvez consulter l'article <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/overview-what-happened-to-workbench">What is happening to Workbench in Azure Machine Learning (preview)?</a>
	</p><p style="text-align: justify">Si vous avez installé l'application Azure Machine Learning Workbench (et/ou que créé des comptes d'expérimentation et de gestion de modèles), vous pouvez par ailleurs vous reporter à l'article <a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-migrate">Migrate to the latest version of Azure Machine Learning service</a> afin de migrer vers cette version la plus récente.
</p><p style="text-align: justify">Ce nécessaire « point de situation » étant partagé, il est désormais temps de passer aux nouveaux SDKs d'Azure Machine Learning ;-)
</p><h1>SDK principal d'Azure Machine Learning SDK en Python
</h1><p style="text-align: justify"><span style="color:black">Le SDK principal d'Azure Machine Learning en Python </span>est destiné à être utilisé par les data scientists et les développeurs d'IA afin de créer et exécuter des flux de travail de Machine Learning avec Azure Machine Learning. 
</p><p style="text-align: justify">Il s'agit concrètement de pouvoir rapidement <span style="color:black;background-color:white">construire, entraîner et déployer vos modèles de Machine Learning et de Deep Learning pour différents domaines. 
</span></p><p style="text-align: justify"><span style="color:black"><span style="background-color:white">Pour cela, </span>ce SDK comprend dans la pratique un ensemble de packages, avec à la clé différents modules et classes dont vous pouvez tirer parti pour vos flux de travail de Machine Learning :
</span></p><ul><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-core/?view=azure-ml-py"><strong>azureml-core</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-train-core/?view=azure-ml-py"><strong>azureml-train-core</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-train-widgets/?view=azure-ml-py"><strong>azureml-train-widgets</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-pipeline-core/?view=azure-ml-py"><strong>azureml-pipeline-core</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-pipeline-steps/?view=azure-ml-py"><strong>azureml-pipeline-steps</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-train-automl/?view=azure-ml-py"><strong>azureml-train-automl</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-telemetry/?view=azure-ml-py"><strong>azureml-telemetry</strong></a><strong>
				</strong></div></li><li><div style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/python/api/azureml-webservice-schema/?view=azure-ml-py"><strong>azureml_webservice-schema</strong></a><strong>
				</strong></div></li></ul><p style="text-align: justify">Comme le souligne Eric Boyd, Corporate Vice President, AI Platform, qui a dirigé cette « ré-imagination » du Service Azure Machine Learning :
</p><blockquote><p>"We heard users wanted to use any tool they wanted, they wanted to use any framework, and so we re-thought about how we should deliver Azure Machine Learning to those users. We have come back with a Python SDK that lights up a number of different features."
</p></blockquote><p style="text-align: justify">Ces fonctionnalités comprennent notamment l'apprentissage profond distribué (Distributed Deep Learning), qui permet aux développeurs de construire et d'entrainer des modèles plus rapidement avec des clusters de GPUs (Graphical Processing Units), et d'avoir l'accès aux FPGAs pour l'image scénarios de reconnaissance et de classification à haute vitesse évoqués en introduction sur Azure.
</p><p style="text-align: justify"><span style="color:black">Comme évoqué précédemment, vous pouvez interagir avec ce SDK depuis n'importe quel environnement Python, y compris <a href="https://jupyter.org/">Jupyter notebook</a> comme avec <a href="https://aka.ms/aml-clone-azure-notebooks">Azure Notebooks</a>, un service gratuit qui peut être utilisé pour développer et exécuter du code dans un navigateur utilisant Jupyter, ou d'autres IDEs de Python, à l'image de <a href="https://www.jetbrains.com/pycharm/">PyCharm</a>, de Visual Studio Code, ou encore d'<a href="https://azure.microsoft.com/fr-fr/services/databricks/">Azure Databricks</a> et ses notebooks.
</span></p><p style="text-align: justify">Pour plus <span style="color:black">Visual Studio Code</span> d'informations, vous pouvez consulter l'article <a href="https://docs.microsoft.com/fr-fr/python/api/overview/azure/ml/intro?view=azure-ml-py">What is the Azure Machine Learning SDK for Python?</a>
	</p><h1>SDK de préparation des données d'Azure Machine Learning
</h1><p><span style="color:black">Comme nous avons pu l'illustrer sur ce blog, la préparation des données constitue une part importante d'un flux de travail de Machine Learning.<span style="background-color:white">
			</span>Vos modèles seront plus précis et efficaces s'ils ont accès à des données propres dont le format est facile à utiliser.</span>
	</p><p><span style="color:black">Le SDK de préparation des données d'Azure Machine Learning en Python permet de charger des données dans différents formats, de les transformer pour être plus facilement utilisable et d'écrire ces données à un emplacement afin que vos flux de travail de Machine Learning et vos modèles dans ce contexte puissent y accéder. 
</span></p><p><span style="color:black">A l'instar du SDK précédent, vous pouvez interagir avec ce SDK depuis n'importe quel environnement Python. 
</span></p><p><span style="color:black">Le SDK de préparation des données d'Azure Machine Learning </span>présente certains avantages par rapport à d'autres bibliothèques populaires dans le domaine de la préparation des données, comme par exemple la <a href="https://pandas.pydata.org/">bibliothèque d'analyse de données Pandas</a> :
</p><ul><li><strong>La lecture intelligente</strong>. Le SDK peut détecter automatiquement tous les types de fichiers pris en charge. On n'a donc pas besoin d'utiliser de lecteurs de fichiers spéciaux pour CSV, texte, Excel, etc., ni de spécifier des paramètres de délimiteur, d'en-tête ou de codage.
</li><li><strong>Le passage à l'échelle en streaming</strong>. Plutôt que de charger toutes les données en mémoire, le moteur du SDK fournit les données en continu ; ce qui lui permet de s'adapter et de mieux fonctionner sur les grands volumes de données.
</li><li><strong>Une fonctionnalité multi-plateforme avec un script de code unique</strong>. Votre code Python est écrit sur la base d'un seul SDK et vous pouvez l'exécuter sous Linux, MacOs, Spark ou Windows avec une évolutivité verticale (mode « scale-up ») ou horizontale (mode « scale-out »). Lors de l'exécution en mode « scale-up », le moteur tente d'utiliser tous les threads matériels disponibles. Lorsqu'il exécute en mode « scale-out », il permet au planificateur distribué d'optimiser l'exécution.
</li></ul><p>Pour plus d'informations, vous pouvez consulter les articles suivants :
</p><ul><li><a href="https://docs.microsoft.com/fr-fr/python/api/overview/azure/dataprep/intro?view=azure-dataprep-py">What is the Azure Machine Learning Data Prep SDK for Python?</a>
		</li><li><a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-load-data">Load and read data with Azure Machine Learning</a>
		</li><li><a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-transform-data">Transform data with the Azure Machine Learning Data Prep SDK</a>
		</li><li><a href="https://docs.microsoft.com/en-us/azure/machine-learning/service/how-to-write-data">Write data using the Azure Machine Learning Data Prep SDK</a>
		</li></ul><p>Ces articles vous donneront une bonne compréhension de l'API ainsi mise à disposition par le <span style="color:black">SDK de préparation des données d'Azure Machine Learning en Python.</span>
	</p><p>Pour ce qui est d'une référence API à proprement parlé, la documentation des différents modules du package <strong>azureml-dataprep</strong>
		<a href="https://docs.microsoft.com/fr-fr/python/api/azureml-dataprep/index?view=azure-dataprep-py">ici</a>.
</p><p>La présentation de certaines évolutions clé du service Azure Machine Learning étant désormais chose faite avec en point principal la disponibilité de nouveaux SDKs d'Azure Machine Learning en Python, nous vous proposons d'aborder dans la <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/10/17/une-introduction-aux-nouveaux-sdks-dazure-machine-learning-2nde-partie/">seconde partie</a> de ce billet une illustration concrète de ceux-ci au travers de la réalisation d'un flux de travail complet de Machine Learning avec le <a href="https://azure.microsoft.com/fr-fr/services/machine-learning-service/">Service Azure Machine Learning</a>.
</p>]]></content:encoded>
    </item>
    <item>
      <title>Une mise en perspective…</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/une-mise-en-perspective</link>
      <pubDate>Thu, 09 Aug 2018 09:32:04 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=10425</guid>
      <description><![CDATA[Annoncés en cascade depuis l'automne 2017, à commencer par la refonte d'Azure Machine Learning et...]]></description>
      <content:encoded><![CDATA[<p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Annoncés en cascade depuis l'automne 2017, à commencer par la refonte d'<a href="https://azure.microsoft.com/fr-fr/overview/machine-learning/">Azure Machine Learning</a> et <a href="https://azure.microsoft.com/fr-fr/services/machine-learning-services/">ses nouveaux services</a> (service d'expérimentation, packages Azure Machine Learning, service de gestion des  modèles, et application Workbench) – celle-ci a donné lieu à toute une série de billets sur ce même blog, de nombreux services, Framework et outils de Machine Learning de Microsoft traduisent de façon concrète la politique de Microsoft de s'investir (toujours plus) dans les technologies d'Intelligence Artificielle (IA). 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Dans l'actualité récente, citons en particulier :
</span></p><ul><li><div style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">D'abord ONNX (Open Neural Network Exchange), un format open source de modèles de Machine Learning et de réseau de neurones, développé par Microsoft en coopération avec notamment Facebook et Amazon.
</span></div></li><li><div style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Ensuite ML.NET, un Framework de Machine Learning à part entière qui permet de simplement créer ses propres modèles dans un environnement .NET. 
</span></div></li><li><div style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Et finalement Windows ML, une plateforme pour les applications Windows qui permet d'y apporter des fonctionnalités de Machine Learning. 
</span></div></li></ul><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Vous pouvez vous renseigner plus en détail sur ces outils en consultant les différents billets qui leur sont dédiés sur ce même blog (<a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/vous-avez-dit-onnx/">ONNX</a>, <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/ml-net-quesaquo/">ML.NET</a> et <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/windows-ml-un-nouveau-venu/">Windows ML</a>).
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Au-delà de leurs capacités intrinsèques multiples et en évolution continue, il nous semble important de mettre en perspective les possibilités offertes par une utilisation conjointe de ces outils ; d'où l'idée de profiter de l'espace de ce billet pour présenter un exemple possible d'utilisation de ces outils ensembles.
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.  
</span></p><h1>Une petite démonstration
</h1><p><span style="font-family:Segoe UI;font-size:10pt">Comme évoqué ci-avant, l'idée même de cet exemple consiste à illustrer et suivre l'emboitement naturel de chacun de ces outils afin de créer un exemple cohérent et auto-suffisant.
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Cette succession naturelle peut se traduire comme suit : 
</span></p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe1.png" alt="" />
	</p><ol><li><span style="font-family:Segoe UI;font-size:10pt">Commencer par d'abord entrainer un modèle de Machine Learning sur ML.NET, 
</span></li><li><span style="font-family:Segoe UI;font-size:10pt">Puis l'exporter sous format ONNX. 
</span></li><li><span style="font-family:Segoe UI;font-size:10pt">Et enfin l'utiliser dans une <a href="https://docs.microsoft.com/fr-fr/windows/uwp/get-started/universal-application-platform-guide">application UWP</a> grâce à la plateforme Windows ML.
</span></li></ol><p><span style="font-family:Segoe UI;font-size:10pt">Le code source de cet exemple est disponible sur GitHub sur <a href="https://github.com/Latylus/DemoMLMicrosoft">ce repo</a>. 
</span></p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe2.png" alt="" />
	</p><p><span style="font-family:Segoe UI;font-size:10pt">L'utilisation finale de cet exemple est la suivante : on veut pouvoir utiliser une application UWP pour reconnaitre des chiffres manuscrits qui y sont dessinés. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">La capture d'écran ci-dessous donne une idée de l'application de cet exemple. 
</span></p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe3.png" alt="" />
	</p><p><span style="font-family:Segoe UI;font-size:10pt">Pour arriver à ce résultat, nous allons donc utiliser les outils mentionnés précédemment.
</span></p><h1>Chez ML.NET
</h1><p><span style="font-family:Segoe UI;font-size:10pt">Commençons par le début et donc un programme utilisant ML.NET pour entrainer un modèle de Machine Learning à reconnaitre des chiffres manuscrits. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Pour l'entrainer, nous nous somme basé sur le jeu de donnés classique : <a href="http://yann.lecun.com/exdb/mnist">MNIST</a>. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Celui-ci a été modifié pour être facilement traitable par un Framework de Machine Learning et peut se trouver sous la forme de deux fichiers dans le dossier <a href="https://github.com/Latylus/DemoMLMicrosoft/tree/master/mldotnetMNIST">mldotnetMNIST</a> : train.csv et test.csv. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Dans cette partie du projet, nous allons procéder en trois étapes pour aboutir à notre résultat désiré, à savoir un modèle de Machine Learning adapté entrainé sur notre jeu de donnés. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Il s'agit en premier lieu de définir le format d'entrée et de sortie de notre modèle pour pouvoir correctement y lier les données. 
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">C'est l'objet des classes contenues dans le fichier <a href="https://github.com/Latylus/DemoMLMicrosoft/blob/master/mldotnetMNIST/MNISTData.cs">MNISTData.cs</a>.
</span></p><p style="margin-left: 36pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe4.png" alt="" /><span style="color:black;font-family:Consolas;font-size:9pt">
		</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Ensuite, lorsque l'on lance le programme principal, il convient de créer le pipeline d'apprentissage en utilisant les formats définis ci-dessus, de charger les données d'entrainement et de les lier à notre pipeline d'apprentissage. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Ici, pour les besoins de l'illustration, notre pipeline d'apprentissage est composé de deux étapes :  i) l'analyse d'un fichier d'entrée pour en extraire nos données sous le format d'entrée voulu, puis ii) un classifieur multi-classes de régression logistique. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Il s'agit d'un classifieur classique dont on sait qu'il est adapté aux problèmes de reconnaissances de caractères (et donc notamment de chiffres) manuscrits.
</span></p><p style="margin-left: 22pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe5.png" alt="" /><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Finalement, on lance l'apprentissage et on exporte le modèle dans le format ONNX voulu. Et voilà !
</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Les deux premières étapes de notre exemple sont ainsi couvertes.
</span></p><p style="text-align: justify"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe6.png" alt="" /><span style="color:black;font-family:Segoe UI;font-size:8pt">
		</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">On peut alors effectuer des mesures de test et de validation sur notre modèle pour déterminer si on en est satisfait du résultat.
</span></p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe7.png" alt="" /><span style="color:black;font-family:Consolas;font-size:9pt">
		</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Ce qui nous donne ces résultats a priori satisfaisants :
</span></p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe8.png" alt="" />
	</p><h1>Du côté de Windows ML
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Il est temps de passer à la troisième et dernière étape de notre exemple.
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Pour pouvoir maintenant utiliser le modèle ONNX de Machine Learning ainsi produit dans une application UWP, on s'intéresse naturellement à l'utilisation de la plateforme Windows ML. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Pour les besoins de notre illustration, notre application UWP est dans la pratique une reprise et une modification du code mis à disposition par Microsoft sur ce <a href="https://github.com/Microsoft/Windows-Machine-Learning/tree/master/Samples/MNIST/UWP">repo GitHub</a>. Il s'agit comme la capture d'écran précédent le suggère d'une application qui se veut très simple quant à l'utilisation d'un modèle de Machine Learning pré-entrainé pour reconnaitre des chiffres manuscrits dessinés par l'utilisateur.
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">La solution Visual Studio <a href="https://github.com/Latylus/DemoMLMicrosoft/blob/master/windowsmlMNIST/MNIST_Demo.sln" title="MNIST_Demo.sln">MNIST_Demo.sln</a> résultante est disponible dans le dossier <a href="https://github.com/Latylus/DemoMLMicrosoft/tree/master/windowsmlMNIST">windowsmlMNIST</a>. (Vous pouvez télécharger gratuitement Visual Studio 2017 Community <a href="https://visualstudio.microsoft.com/downloads/">ici</a>.)
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">De manière parallèle au cas de ML.NET il s'agit d'abord de définir le format du modèle ainsi que le format de ses entrées et de ses sorties. Comme souligné dans <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/windows-ml-un-nouveau-venu/">le billet précédent</a> de ce blog, la génération de ces informations s'effectue de manière automatique à partir du modèle ONNX. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Deux opérations sont ensuite nécessaires pour utiliser notre modèle. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Il faut tout d'abord charger le modèle en mémoire. Ceci a lieu au lancement de l'application (fichier <a href="https://github.com/Latylus/DemoMLMicrosoft/blob/master/windowsmlMNIST/MainPage.xaml.cs">MainPage.xaml.cs</a>).
</span></p><p style="margin-left: 18pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe9.png" alt="" /><span style="color:black;font-family:Consolas;font-size:9pt">
		</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Ensuite, dès que l'on souhaite appliquer le modèle à une donnée, c'est-à-dire, ici, reconnaitre un chiffre manuscrit, il faut lier l'entrée du modèle avec la donnée réelle, ici le contenu d'un canevas), puis appeler la prédiction du modèle.
</span></p><p style="margin-left: 18pt"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1220_Unemiseenpe10.png" alt="" /><span style="color:black;font-family:Consolas;font-size:9pt">
		</span></p><p><span style="font-family:Segoe UI;font-size:10pt">Ceci nous affiche alors (93% du temps) le bon chiffre manuscrit.
</span></p><h1>En guise de conclusion
</h1><p>
 </p><p><span style="font-family:Segoe UI;font-size:10pt">Malgré leurs sorties récentes, ML.NET, ONNX et Windows ML permettent d'ores et déjà de s'agencer entre eux de manière assez intuitive comme nous avons souhaité l'illustrer ici de façon pratique. On arrive alors à produire des résultats satisfaisants à partir d'implémentations somme toute assez minimales. 
</span></p><p><span style="font-family:Segoe UI"><span style="font-size:10pt">Avec l'arrivée de nouvelles versions (toujours plus abouties) de ces outils, cette fluidité devrait continuer à s'améliorer, tout en gardant cette simplicité d'implémentation ! :-)</span><span style="color:black;font-size:8pt">
			</span></span></p>]]></content:encoded>
    </item>
    <item>
      <title>Windows ML, un nouveau venu !</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/windows-ml-un-nouveau-venu</link>
      <pubDate>Fri, 29 Jun 2018 15:20:43 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=10255</guid>
      <description><![CDATA[Annoncé en Mars 2018, Windows ML (Machine Learning) s'inscrit dans la politique de Microsoft de...]]></description>
      <content:encoded><![CDATA[<p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Annoncé en <a href="https://blogs.windows.com/buildingapps/2018/03/07/ai-platform-windows-developers/">Mars 2018</a>, Windows ML (Machine Learning) s'inscrit dans la politique de Microsoft de s'investir (toujours plus) dans les technologies d'Intelligence Artificielle (IA) à l'image de l'actualité partagé dans le cadre des derniers billets publiés sur ce blog.
</span></p><p>Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.  
</p><h1>Qu'est-ce que Windows ML ?
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">L'objectif réside dans le cas présent à permettre à tous les développeurs d'applications ou de services Windows de pouvoir utiliser des fonctionnalités d'IA.
</span></p><p>Windows ML est une plateforme qui apporte des fonctionnalités d'apprentissage automatique ou Machine Learning à des <a href="https://docs.microsoft.com/fr-fr/windows/uwp/get-started/universal-application-platform-guide">applications Windows UWP</a>. 
</p><p>Cette dernière permet d'exécuter des modèles de Machine Learning préalablement entrainés, au format <a href="http://onnx.ai/">ONNX</a>, c.à.d. un format standard de l'industrie, développé par Microsoft, Facebook et Amazon Web Services (AWS) - <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/vous-avez-dit-onnx/">un billet sur ce blog</a> a été consacré à ONNX -. 
</p><p><a href="https://youtu.be/oV1J2ELpgSs">Cette vidéo de Channel 9 AI Show</a> vous donne une idée des possibilités ainsi offertes.
</p><p style="text-align: center"><a href="https://youtu.be/oV1J2ELpgSs"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/062918_1939_WindowsMLun1.png" alt="" border="0" /></a>
	</p><p style="text-align: center">(Le code de l'application exemple est disponible via <a href="https://blogs.technet.microsoft.com/machinelearning/2018/03/13/how-three-lines-of-code-and-windows-machine-learning-empower-net-developers-to-run-ai-locally-on-windows-10-devices/">ce billet de blog</a>.)
</p><p>Windows ML exécute ces modèles de Machine Learning sur la machine Windows locale, et se charge d'exploiter au mieux les capacités de celle-ci.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/062918_1939_WindowsMLun2.png" alt="" /><strong>
		</strong></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">A ce titre, remarquons cependant que Windows ML n'est pas un Framework de Machine Learning ou Deep Learning (apprentissage profond) comme cette plateforme ne permet pas dans la pratique d'entrainer ou de paramétriser des modèles ; elle permet juste de les utiliser. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">D'autres outils Microsoft sont disponibles pour entrainer des modèles de Machine Learning/Deep Learning (tels que le <a href="http://www.microsoft.com/en-us/cognitive-toolkit">Microsoft Cognitive Toolkit (CNTK)</a> ou <a href="https://github.com/dotnet/machinelearning">ML.NET</a> - <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/ml-net-quesaquo/">un billet sur ce blog</a> a été consacré à ML.NET -.
</span></p><p>Windows ML offre une flexibilité de lieu d'exécution qui ne dépend plus uniquement du Cloud (où la plupart des exécutions de modèles de Machine Learning ont (encore) lieu actuellement) : si l'appareil est déconnecté du Cloud ou que les données ne peuvent pas y être envoyées – pour des questions de coût, de taille, de latence par exemple – on peut toujours décider d'effectuer le processus de Machine Learning sur la machine locale.
</p><p>Ceci s'inscrit pleinement dans la stratégie d'« Intelligent Cloud – Intelligent Edge » de Microsoft.
</p><h1>Quelques fonctionnalités de Windows ML
</h1><p style="text-align: justify">Windows ML permet de s'abstraire des spécificités système qu'il est généralement nécessaire de prendre en compte lors de l'exploitation de modèles de Machine Learning. 
</p><p style="text-align: justify">Pour cela, la plateforme se place en couche intermédiaire entre l'application et les sous-couches responsable de gérer les interactions avec les composants physiques du système.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/062918_1939_WindowsMLun3.png" alt="" />
	</p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Avec des appareils compatibles, WindowsML exploite les accélérations matérielles possibles (carte graphique, optimisations de processeur, etc.), ainsi que l'optimisation de certains types de donnés (image et vidéo par exemple) afin d'augmenter les performances d'évaluation de modèles de Lachine Learning. Ceci permet d'utiliser des fonctionnalités de Machine Learning dans un environnement où les résultats sont nécessaires en temps réel à l'image des <a href="https://blogs.msdn.microsoft.com/directx/2018/03/19/gaming-with-windows-ml/">moteurs de jeu</a>. 
</span></p><p style="text-align: justify">Du côté du code, Windows ML se charge aussi de générer une interface autour du modèle de Machine Learning, permettant de l'utiliser facilement depuis une application UWP. 
</p><p style="text-align: justify">Sur Visual Studio 2017 (en <a href="https://visualstudio.microsoft.com/vs/preview/"><span style="font-family:Segoe UI;font-size:10pt">version 15.7</span></a>), cette génération se fait automatiquement. 
</p><p style="text-align: justify">Dans l'Explorateur de Solution, cliquez sur votre dossier ressource, puis sélectionnez « Ajouter &gt; Elément existant ». 
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/062918_1939_WindowsMLun4.png" alt="" />
	</p><p style="text-align: justify">Après avoir choisi votre modèle ONNX (<span style="font-family:Consolas">mnist.onnx </span>dans notre illustration), le modèle est ajouté au projet ainsi que le fichier <span style="font-family:Consolas">mnist.cs </span>qui contient l'interface automatiquement générée.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/06/062918_1939_WindowsMLun5.png" alt="" />
	</p><p style="text-align: justify">On peut également générer ce fichier supplémentaire grâce à l'outil <a href="https://docs.microsoft.com/en-us/windows/uwp/machine-learning/overview"><span style="font-family:Segoe UI;font-size:10pt">mlgen</span></a><span style="font-family:Segoe UI;font-size:10pt"> si on n'utilise pas Visual Studio par exemple. 
</span></p><p style="text-align: justify">Cette interface permet d'interagir assez facilement avec les fonctionnalités proposées par les modèles de Machine Learning. Elle suit le patron « Load, Bind and Evaluate », c.à.d. « Charger, Lier et Evaluer » : autrement dit, on commence par charger en mémoire le modèle de Machine Learning à partir d'un fichier sous format ONNX, on lie ensuite les données d'entrée correspondant au type d'entrée attendu, puis on évalue le modèle sur les données d'entrée. Cette dernière étape fournis des résultats qui peuvent être consultés et analysés.
</p><p style="text-align: justify">C'est pour cela que 3 classes sont créées dans le fichier automatiquement généré : <span style="font-family:Consolas">MNISTModelInput</span> ,<span style="font-family:Consolas">MNISTModelOutput </span>et <span style="font-family:Consolas">MNISTModel</span>. 
</p><p style="text-align: justify">La première définit le type attendu en entrée, la seconde celui qui sera donné en sortie, et la troisième s'occupe de charger le modèle, de le lier aux entrées réelles et à la sortie, puis d'exposer une méthode d'évaluation du modèle.
</p><p style="text-align: justify">Voilà pour les principes de base !
</p><h1>Commencer avec Windows ML
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Avant de commencer, il est nécessaire d'avoir installé le kit de développement <a href="https://developer.microsoft.com/windows/downloads/windows-10-sdk">Windows 10 SDK</a> et d'utiliser une version de Windows 10 au moins aussi récente que la 17110. Il est par ailleurs recommandé d'utiliser <a href="https://visualstudio.microsoft.com/vs/preview/">Visual Studio</a> en tant qu'IDE notamment pour la génération automatique d'interface comme nous l'avons illustré.
</span></p><p style="text-align: justify"><a href="https://docs.microsoft.com/fr-fr/windows/uwp/machine-learning/get-started"><span style="font-family:Segoe UI;font-size:10pt">Cette page</span></a> présente une prise en main claire de Windows ML basée sur exemple simple préexistant. Cette prise en main permet d'appréhender les outils et méthodes nécessaires pour utiliser WindowsML dans le cadre d'une application UWP simple.
</p><h1>Pour aller plus loin
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">D'autres projets servant d'exemples sont disponibles sur <a href="https://github.com/Microsoft/Windows-Machine-Learning">ce repo GitHub</a> et permettent de voir d'autre cas d'applications de Windows ML.
</span></p><p style="text-align: justify">Il ne vous reste plus qu'à développer vos applications intelligentes ! ;-)
</p>]]></content:encoded>
    </item>
    <item>
      <title>ML.NET, Quesaquo ?</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/ml-net-quesaquo</link>
      <pubDate>Fri, 29 Jun 2018 15:14:57 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=10195</guid>
      <description><![CDATA[L'actualité de la plateforme d'IA de Microsoft est riche et à ce propos, nous souhaitions revenir...]]></description>
      <content:encoded><![CDATA[<p style="text-align: justify">L'actualité de la plateforme d'IA de Microsoft est riche et à ce propos, nous souhaitions revenir l'espace d'un billet sur une annonce récente, celle de ML.NET.
</p><p>Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Qu'est-ce que ML.NET ? 
</h1><p style="text-align: justify"><a href="https://blogs.msdn.microsoft.com/dotnet/2018/05/07/introducing-ml-net-cross-platform-proven-and-open-source-machine-learning-framework/"><span style="font-family:Segoe UI;font-size:10pt">Annoncé lors de la conférence //Build 2018</span></a><span style="font-family:Segoe UI;font-size:10pt"> en mai dernier, ML.NET est un nouveau Framework d'apprentissage automatique ou Machine Learning créé à destination des développeurs .NET. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Dans la pratique, ce Framework permet donc de créer, paramétriser, tester et intégrer nativement des modèles de Machine Learning personnalisés au sein de ses applications .NET Core. Autrement dit, ML.NET permet ainsi d'analyser des sentiments, de prédire des prix, de détecter des fraudes, etc. dans le contexte spécifique de votre application .NET Core.
</span></p><p>ML.NET se positionne en complément des services (ou APIs) cognitifs <a href="https://azure.microsoft.com/fr-fr/services/cognitive-services/">Cognitive Services</a> et des services <a href="https://azure.microsoft.com/fr-fr/overview/machine-learning/">Azure Machine Learning</a> (auxquels nous avons consacrés toutes une série de billets sur ce blog) disponibles sur la plateforme Microsoft Azure et ce, en proposant une approche centrée autour du code, permettant de construire son propre modèle et de le déployer localement sur son application.
</p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">ML.NET est en open source et multi-plateforme (Windows, Linux et MacOs). ML.NET est amené à rapidement progresser et évoluer pour toujours proposer de nouvelles fonctionnalités et connections avec d'autres solutions.
</span></p><p style="text-align: justify"><strong>Mise à jour</strong> : A ce propos, ML.NET vient de passer en version 0.3 au mois de juillet dernier.
</p><h1>Pourquoi ML.NET ?
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">ML.NET était originalement développé en interne au sein de Microsoft Research (MSR) pour être utilisé dans des produits et services Microsoft comme Windows, Bing ou Azure pour n'en citer que quelques-uns. Désormais, avec cette version préliminaire publique, tout un chacun peut utiliser la puissance du Machine Learning pour de la classification, du clustering ou de la régression dans des applications .NET.
</span></p><p style="text-align: justify">Dans les faits, ML.NET reste un Framework simple d'utilisation basé comme beaucoup de Frameworks et de bibliothèques de Machine Learning autour de pipelines d'apprentissage. 
</p><p style="text-align: justify">A titre d'illustration, l'extrait de code ci-dessous donne une idée de la méthode requise pour créer un modèle de reconnaissance de sentiment et l'entrainer.
</p><p><span style="font-family:Consolas"><span style="font-size:10pt"><span style="color:#902000">var</span> pipeline = <span style="color:#007020"><strong>new</strong></span>
				<span style="color:#06287e">LearningPipeline</span>();</span><span style="font-size:9pt"><br /><br /></span><span style="color:#60a0b0;font-size:10pt"><em>//Pour charger les données sous format texte</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">pipeline.<span style="color:#06287e">Add</span>(<span style="color:#007020"><strong>new</strong></span>
				<span style="color:#06287e">TextLoader</span>(dataPath).<span style="color:#06287e">CreateFrom</span>&lt;SentimentData&gt;(separator: <span style="color:#4070a0">','</span>));</span><span style="font-size:9pt"><br /></span><span style="color:#60a0b0;font-size:10pt"><em>//Pour passer de format texte à format "numérique" sur lequel l'algorithme peut fonctionner</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">pipeline.<span style="color:#06287e">Add</span>(<span style="color:#007020"><strong>new</strong></span>
				<span style="color:#06287e">TextFeaturizer</span>(<span style="color:#4070a0">"Features"</span>, <span style="color:#4070a0">"SentimentText"</span>));</span><span style="font-size:9pt"><br /></span><span style="color:#60a0b0;font-size:10pt"><em>//Classificateur à proprement parler à entrainer</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">pipeline.<span style="color:#06287e">Add</span>(<span style="color:#007020"><strong>new</strong></span>
				<span style="color:#06287e">FastTreeBinaryClassifier</span>());</span><span style="font-size:9pt"><br /><br /></span><span style="color:#60a0b0;font-size:10pt"><em>//Entrainement</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt"><span style="color:#902000">var</span> model = pipeline.<span style="color:#06287e">Train</span>&lt;SentimentData, SentimentPrediction&gt;();</span><span style="font-size:9pt">
			</span></span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Pour obtenir la prédiction d'un modèle sur une nouvelle donnée, un simple appel de méthode suffit ! :-)
</span></p><p><span style="font-family:Consolas"><span style="color:#60a0b0;font-size:10pt"><em>//Générer une donnée à traiter</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">SentimentData data = <span style="color:#007020"><strong>new</strong></span> SentimentData</span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">{</span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">    SentimentText = <span style="color:#4070a0">"Today is a great day!"</span></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">};</span><span style="font-size:9pt"><br /><br /></span><span style="color:#60a0b0;font-size:10pt"><em>//Prédiction du sentiment dans cette donnée</em></span><span style="font-size:9pt"><br /></span><span style="font-size:10pt">SentimentPrediction prediction = model.<span style="color:#06287e">Predict</span>(data);</span><span style="font-size:9pt"><br /><br /></span><span style="font-size:10pt">Console.<span style="color:#06287e">WriteLine</span>(<span style="color:#4070a0">"prediction: "</span> + prediction.<span style="color:#06287e">Sentiment</span>);</span><span style="font-size:9pt">
			</span></span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Comme mentionné ci-avant, ML.NET est un projet récent et dû à son caractère Open Source, le Framework est amené à grandement évoluer et progresser dans le futur proche, notamment en ajoutant des fonctionnalités et des extensions (vers d'autres Frameworks et plateformes de Machine Learning par exemple).
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Les composants disponibles avec la version 0.1 de ML.NET sont les suivants. 
</span></p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_0822_MLNETQuesaq1.png" alt="" /><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">La version 0.2 ajoute des capacités de clustering au Framework, ainsi que des améliorations sur les méthodes de validations des modèles (partition entrainement-test, validation croisée, et.) et au-delà dans de <a href="https://github.com/GalOshri/machinelearning/blob/f026db2cdba1858b0e8bea2ddf2a4092a61bd708/docs/release-notes/0.2/release-0.2.md">nombreux autres domaines</a>. Dans tous ces cas, les composants sont accessibles à partir une API simple et générique qui a pour but de se généraliser aux appels d'autre Frameworks. 
</span></p><p style="text-align: justify"><strong>Mise à jour :</strong> La nouvelle version 0.3 du mois de juillet propose à la clé de nombreuses nouvelles fonctionnalités : tout d'abord la capacité d'exporter certains modèles sous <a href="https://blogs.msdn.microsoft.com/mlfrance/2018/06/29/vous-avez-dit-onnx/"><span style="font-family:Segoe UI;font-size:10pt">format ONNX</span></a> pour plus d'inter-compatibilité, mais aussi de nouveau classifieurs (tels le <a href="https://github.com/Microsoft/LightGBM"><span style="font-family:Segoe UI;font-size:10pt">LightGBM</span></a>) et de nouveaux éléments de transformation (comme la possibilité d'utiliser des méthodes d'ensemble ou des méthodes « Un contre Tous » avec des classifieurs existants). 
</p><p style="text-align: justify">Nous vous donnons rendez-vous sur les liens suivants pour un récapitulatif plus complet sur l'historique des évolutions apportées :
</p><ul><li><div style="text-align: justify"><a href="https://blogs.msdn.microsoft.com/dotnet/2018/05/07/introducing-ml-net-cross-platform-proven-and-open-source-machine-learning-framework/"><span style="font-family:Segoe UI;font-size:10pt">ML.NET 0.1</span></a>
			</div></li><li><div style="text-align: justify"><a href="https://blogs.msdn.microsoft.com/dotnet/2018/06/05/announcing-ml-net-0-2/"><span style="font-family:Segoe UI;font-size:10pt">ML.NET 0.2</span></a>
			</div></li><li><div style="text-align: justify"><a href="https://blogs.msdn.microsoft.com/dotnet/2018/07/09/announcing-ml-net-0-3/"><span style="font-family:Segoe UI;font-size:10pt">ML.NET 0.3</span></a>
			</div></li></ul><h1>Comment commencer avec ML.NET ?
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Pour se familiariser avec les bases de l'apprentissage automatique, <a href="https://docs.microsoft.com/fr-fr/dotnet/machine-learning/resources/basics">ce lien</a> fournit quelques ressources essentielles.
</span></p><p style="text-align: justify">Pour commencer avec ML.NET, il convient avant tout de s'assurer d'avoir installé <a href="https://www.microsoft.com/net/learn/get-started"><span style="font-family:Segoe UI;font-size:10pt">.NET Core 2.0</span></a> (ou une version plus récente). 
</p><p style="text-align: justify">Il faut ensuite installer le paquet NuGet ML.NET depuis une ligne de commande :
</p><p style="text-align: justify"><span style="font-family:Consolas;font-size:11pt">dotnet add package Microsoft.ML
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Quelques didacticiels en anglais sont disponibles dès aujourd'hui pour commencer à se familiariser avec ML.NET. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Il est assez facile de commencer avec la <a href="https://www.microsoft.com/net/learn/apps/machine-learning-and-ai/ml-dotnet/get-started">prédiction de pétales d'iris</a>, un exemple classique dans le domaine du Machine Learning qui s'est trouvé repris par quelques billets de ce même blog. 
</span></p><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Une <a href="https://docs.microsoft.com/fr-fr/dotnet/machine-learning/tutorials/index">liste de tutoriels sur le sujet</a> donne quelques exemples supplémentaires qui permettent de mieux comprendre le fonctionnement de ML.NET sur des cas d'application plus complexes.
</span></p><h1>Pour aller plus loin
</h1><p style="text-align: justify"><span style="font-family:Segoe UI;font-size:10pt">Sur <a href="https://github.com/dotnet/machinelearning-samples">cette page</a> du repo GitHub consacré au projet, d'autre exemples sont (encore) disponibles, allant d'échantillons basiques jusqu'à des applications complètes.
</span></p><p style="text-align: justify">La <a href="https://docs.microsoft.com/fr-fr/dotnet/api/microsoft.ml?view=ml-dotnet"><span style="font-family:Segoe UI;font-size:10pt">documentation</span></a> de ML.NET sur docs.microsoft.com permet aussi de trouver des informations intéressantes sur le sujet.
</p><p style="text-align: justify">Si vous êtes intéressés pour faire progresser ML.NET en suggérant de nouvelles fonctionnalités ou en corrigeant des problèmes, n'hésitez pas à vous rendre sur <a href="https://github.com/dotnet/machinelearning"><span style="font-family:Segoe UI;font-size:10pt">la page GitHub principale</span></a> du projet.
</p><p style="text-align: justify">Enfin, une <a href="https://gitter.im/dotnet/mlnet"><span style="font-family:Segoe UI;font-size:10pt">communauté Gitter</span></a> active permet d'échanger et d'interroger les membres actifs qui développent et travaillent avec ML.NET pour rester au plus proche des nouveautés et des avantages que proposent le Framework.
</p>]]></content:encoded>
    </item>
    <item>
      <title>Vous avez dit ONNX ?</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/vous-avez-dit-onnx</link>
      <pubDate>Fri, 29 Jun 2018 14:53:57 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=9855</guid>
      <description><![CDATA[L'Intelligence Artificielle (IA) constitue un accélérateur de la transformation numérique pour...]]></description>
      <content:encoded><![CDATA[<p>L'Intelligence Artificielle (IA) constitue un accélérateur de la transformation numérique pour chaque industrie, avec des exemples couvrant la fabrication, la vente au détail, la finance, les soins de santé et bien d'autres encore. À ce rythme, chaque industrie sera en mesure d'utiliser l'IA pour amplifier l'ingéniosité humaine. (Je vous invite à lire à ce propos l'eBook <a href="https://blogs.microsoft.com/blog/2018/01/17/future-computed-artificial-intelligence-role-society/">The Future Computed: Artificial Intelligence and its role in society</a>.)
</p><p>Dans ce contexte, nous avons consacré récemment un certain nombre de billets à des services de la plateforme IA de Microsoft à l'image d'<a href="https://azure.microsoft.com/fr-fr/overview/machine-learning/">Azure Machine Learning</a> et il semblait intéressant de nous arrêter l'espace de ce billet sur un projet moins connu mais pour autant clé, à savoir le projet ONNX, d'où le titre de ce billet.
</p><p>Je tiens à remercier Pierre Lataillade actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution. 
</p><h1>Qu'est-ce qu'ONNX ?
</h1><p style="text-align: justify"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit1.png" alt="" />
	</p><p><a href="http://onnx.ai/">ONNX (Open Neural Network Exchange)</a> est un format en Open Source pour modèles d'apprentissage profond ou Deep Learning. 
</p><p>Annoncé en <a href="https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/09/microsoft-facebook-create-open-ecosystem-ai-model-interoperability/">Septembre 2017</a> par Microsoft et Facebook, ce projet communautaire sur <a href="https://github.com/onnx">GitHub</a> vise à établir un écosystème ouvert pour les modèles d'Intelligence Artificielle (IA). Une première version d'ONNX a été publié en <a href="https://research.fb.com/onnx-v1-released/?">Décembre 2017</a> après une vague de soutient de nombreux acteurs dans le domaine (avec notamment l'arrivée d'<a href="https://aws.amazon.com/blogs/machine-learning/announcing-onnx-support-for-apache-mxnet/">Amazon Web Services (AWS)</a>). 
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit2.png" alt="" />
	</p><p>Dans ce billet, nous allons tenter d'expliquer et d'exploiter les avantages de ce format. Et commencer par nous intéresser à pourquoi un tel projet ?
</p><h1>Pourquoi ONNX ?
</h1><p style="text-align: justify">Il existe aujourd'hui de nombreux Frameworks pour créer et déployer des modèles de Deep Learning. On peut ainsi nommer Caffe2, PyTorch, Cognitive Toolkit (CNTK), Apache MXnet, Chainer, TensorFlow, Apple CoreML, Scikit-Learn et d'autres encore existent. Cette liste est donc loin d'être exhaustive.
</p><p style="text-align: justify">Tous ces Frameworks possèdent leur propres représentations propriétaires des modèles qu'ils permettent de constituer et qu'ils utilisent. Cependant, jusqu'à présent, aucune de ces représentations ou format n'est réutilisable dans un autre Framework. 
</p><p style="text-align: justify">De plus, chaque Framework possède intrinsèquement ses spécificités et ses spécialités, dues à leurs méthodes d'accès aux ressources physiques de la machine : exécution efficace en bordure, entrainement rapide, utilisation dans un réseau complexe, etc.
</p><p style="text-align: justify">Ces différents avantages et ces contraintes donnent naturellement lieu à des besoins de conversion entre les formats utilisés par les différents modèles. C'est justement notamment pour éviter ces lourdeurs que le projet ONNX existe. 
</p><p style="text-align: justify">L'idée centrale consiste à pouvoir utiliser les Frameworks que l'on souhaite pour générer, tester, paramétriser ou déployer notre modèle et d'assurer une transition fluide et simple entre les différents Framework utilisés grâce à ONNX. 
</p><p style="text-align: justify">En effet, le format ONNX issu du projet communautaire éponyme peut être importé et exporté par de nombreux Frameworks. 
</p><p style="text-align: justify">Vous pouvez à cet effet consulter :
</p><ul><li><div style="text-align: justify"><a href="http://onnx.ai/supported-tools"><span style="font-family:Segoe UI;font-size:10pt">Ce lien</span></a> pour une liste à jour des Frameworks totalement supportés, 
</div></li><li><div style="text-align: justify">Et <a href="https://github.com/onnx/tutorials"><span style="font-family:Segoe UI;font-size:10pt">celui-ci</span></a> pour ceux qui le sont aussi partiellement, par exemple uniquement en écriture.
</div></li></ul><p>Les objectifs de ce format étant établis, regardons les principes de fonctionnement.
</p><h1>Comment fonctionne ONNX ?
</h1><p>Sans rentrer dans les détails – ce billet n'y suffirait pas -, ce format définit dans les grandes lignes un graphe calculatoire extensible, des opérateurs standard, des types de données standard et, facultativement, de la métadonnée sur le modèle (auteur, but, etc.). 
</p><p>Le graphe calculatoire est un graphe acyclique composé des nœuds. Chaque nœud possède au moins une entrée et une sortie et représente un appel à un opérateur. 
</p><p>Ces opérateurs peuvent être soit standard (c.à.d. prédéfinis par ONNX), soit définis de manière externe au modèle. Une fois ces données définies, elles sont sérialisées par le format d'échange de données <a href="https://github.com/google/protobuf">Protobuf</a> (Protocol Buffers).
</p><p style="text-align: justify">Ce format permet de représenter simplement les modèles de Deep Learning et de garantir (notamment grâces aux opérateurs et types de données standard) la transversalité d'ONNX.
</p><h1>Comment commencer avec ONNX ?
</h1><p>Il faut comprendre qu'ONNX n'existe pas seul, et que son utilisation dépend forcément du Framework concerné (même si celle-ci reste toujours très simple). Par exemple, la bibliothèque associée à ONNX, qui permet d'importer et d'exporter des modèles sous ce format, peut être installée par défaut avec le Framework considéré ou peut demander au contraire une installation spécifique. 
</p><p>De plus, il faut avoir préalablement créé un modèle pour (pouvoir) le sauvegarder sous format ONNX.
</p><p>A titre d'illustration, voici ici un exemple en <a href="https://pytorch.org/">PyTorch</a> pour montrer la facilité d'utilisation d'ONNX. 
</p><p>Pour que cet exemple en Python fonctionne, il est nécessaire d'avoir installé au préalable le paquet <span style="font-family:Consolas">pytorch</span>. On utilisera un modèle préexistant disponible par défaut avec PyTorch : celui d'<a href="https://github.com/pytorch/vision/blob/master/torchvision/models/alexnet.py">AlexNet</a>.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit3.png" alt="" /><span style="font-family:Consolas;font-size:9pt">
		</span></p><p>Et voilà ! 
</p><p>Avec les quelques lignes précédentes, on a ainsi exporté notre modèle AlexNet sous le format ONNX dans le fichier <span style="font-family:Consolas">alexnet.onnx</span>. 
</p><p>La simplicité de cette opération se retrouvent avec les autres Framework prenant en charge le format.
</p><p>Pour l'importation d'un modèle à partir du fichier, une simple ligne de code avec des arguments plutôt faciles à fournir. <a href="http://onnx.ai/getting-started">Cette page</a> redirige vers toutes les informations spécifiques à chaque Framework concerné.
</p><h1>Pour progresser
</h1><p style="text-align: justify">Pour se faire une idée des utilisations possible d'ONNX, <a href="https://github.com/onnx/tutorials"><span style="font-family:Segoe UI;font-size:10pt">cette partie</span></a> du repo GitHub d'ONNX donne quelques exemples et tutoriels plus complexes au-delà des principes précédents. 
</p><p>Globalement cependant l'utilisation des fonctionnalités d'ONNX demeure extrêmement simple.
</p><p>Il peut être intéressant de noter que si vous utilisez Visual Studio, l'extension <a href="https://marketplace.visualstudio.com/items?itemName=ms-toolsai.vstoolsai-vs2017">Visual Studio Tools for AI</a> permet de convertir des modèles sous certains formats (CoreML, TensorFlow, SciKit, LIBSVM et XGboost) vers un format ONNX depuis une interface graphique intégrée à l'EDI à partir d'outils Python spécialisés (dont l'installation est guidée si nécessaire).
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit4.png" alt="" />
	</p><p style="text-align: justify">
 </p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit5.png" alt="" />
	</p><h1>Visualiser les modèles ONNX
</h1><p>Il peut être intéressant (notamment lors de travaux collaboratifs) de visualiser les modèles contenus dans les fichiers ONNX. 
</p><p>Pour cela, il existe à ce jour deux outils principaux, mais l'un des deux est beaucoup plus simple d'utilisation et d'installation que l'autre. Nous nous intéressons ici au premier. Vous pouvez suivre <a href="https://github.com/onnx/tutorials/blob/master/tutorials/VisualizingAModel.md">ce lien</a> si vous voulez absolument utiliser l'outil plus compliqué -. 
</p><p>Il s'agit du projet communautaire <a href="https://github.com/lutzroeder/Netron">Netron</a> sur GitHub. Netron est un logiciel/d'une application Web à part entière, qui permet de charger notamment des modèles sous forme ONNX afin de les visualiser au sein d'une interface graphique.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit6.png" alt="" /><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><p>Si vous travaillez avec Visual Studio, avec l'extension <a href="https://marketplace.visualstudio.com/items?itemName=ms-toolsai.vstoolsai-vs2017">Visual Studio Tools for AI</a> mentionnée précédemment, Netron est directement disponible depuis l'interface habituelle de l'IDE afon de permettre de visualiser les modèles utilisés
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit7.png" alt="" /><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><p style="text-align: center">
 </p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit8.png" alt="" /><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><h1>Pour aller plus loin
</h1><p>Ceci conclut cette première introduction au projet ONNX et au format qu'il représente. Nous espèrons que ce billet vous aura donné l'envie de creuser le sujet !
</p><p>Vous pouvez télécharger <a href="https://info.microsoft.com/ww-landing-ai-developers-bot-ebook.html">l'eBook A Developer's Guide to Building AI Application</a> pour en apprendre plus sur ONNX.
</p><p style="text-align: center"><a href="https://info.microsoft.com/ww-landing-ai-developers-bot-ebook.html"><img src="https://msdnshared.blob.core.windows.net/media/2018/08/080918_1223_Vousavezdit9.png" alt="" border="0" /></a>
	</p><p>Pour en apprendre plus sur ONNX et, le cas échéant participer à cet effort, rendez-vous sur <a href="http://onnx.ai/" target="_blank">http://onnx.ai</a>. Vous pouvez également obtenir des mises à jour sur l'actualité d'ONNX via <a href="https://www.facebook.com/onnxai/" target="_blank">Facebook</a> et @onnxai sur Twitter.
</p>]]></content:encoded>
    </item>
    <item>
      <title>Collaborer sur vos projets DS avec Azure ML Workbench</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/collaborer-sur-vos-projets-ds-avec-azure-ml-workbench</link>
      <pubDate>Wed, 31 Jan 2018 16:35:53 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=9295</guid>
      <description><![CDATA[Nous commençons cette nouvelle année 2018 avec ce billet qui s'inscrit dans la série de billets...]]></description>
      <content:encoded><![CDATA[<p>
 </p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers1.png" alt="" />
	</p><p>Nous commençons cette nouvelle année 2018 avec ce billet qui s'inscrit dans la série de billets déjà publiés sur les nouveaux services d'<a href="https://azure.microsoft.com/fr-fr/overview/machine-learning/">Azure Machine Learning</a> (Azure ML). Pour mémoire, cette série de billets vise à vous faire découvrir progressivement ce nouvel environnement Azure ML, à en partager avec vous les nouveautés et bénéfices, et de pouvoir aborder plus en profondeur certains aspects des fonctionnalités ainsi offertes. 
</p><p> Ce billet s'intéresse plus particulièrement comme son titre l'indique à la collaboration en équipe autour d'un projet de Data Science (DS). 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers2.jpg" alt="" />
	</p><p>L' « établi » dans Azure ML, à savoir Azure ML Workbench, vous permet, entre choses, de collaborer avec votre équipe au travers de l'intégration de Git en arrière-plan, et ainsi de partager vos avancées, l'historique de vos exécutions, etc. Dans la version courante, et à la date de publication de ce billet, Azure ML propose la prise en charge d'un dépôt Git sur <a href="https://azure.microsoft.com/fr-fr/services/visual-studio-team-services/">Visual Studio Team Services</a> (VSTS) est supporté. (Le support de forges externe comme GitHub est prévu dans les versions à venir pour venir étoffer le champ des possibles.)
</p><p>Voyons ce qu'il en est et comment collaborer efficacement au travers des fonctionnalités présentes. Bien évidemment, pour cela, vous devez au préalable avoir créé un compte d'Expérimentation sur la plateforme Microsoft Azure comme décrit dans <a href="https://blogs.msdn.microsoft.com/mlfrance/2017/10/30/mise-en-place-dun-environnement-azure-machine-learning/">ce billet</a> de la série.
</p><p>J'en profite pour remercier Paul Jenny actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Créer son projet d'équipe ou utiliser un existant
</h1><p>Pour créer votre projet d'équipe (Team Project), vous devez d'abord vous rendre sur le <a href="https://portal.azure.com/">portail Azure</a> puis <strong>Créer une ressource</strong> et enfin recherchez <strong>Team Project</strong> et puis cliquez sur le bouton <strong>Créer</strong> :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers3.png" alt="" />
	</p><p>Si vous n'avez pas de compte de service d'équipe (Team Services), vous devez en créer un à ce stade via la <span style="font-family:Segoe UI;font-size:10pt">fenêtre</span> dédiée comme illustré ci-après :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers4.png" alt="" />
	</p><p>Choisissez bien <strong>GIT</strong> en contrôle de version pour votre projet d'équipe ainsi que la localisation appropriée.
</p><p>Par ailleurs, vérifiez bien de cibler votre projet d'équipe dans le même abonnement Azure que vous allez utiliser pour Azure Machine Learning sinon vous ne pourrez pas accéder à vos projets !
</p><p>Une fois tout ceci fait, vous pouvez cliquer sur <strong>Créer</strong>.
</p><p>Vous pouvez accéder à tout moment aux projets que vous avez créés dans votre compte « Team Services » en accédant à votre espace de la forme :
</p><p><a>https://&lt;<em>nom_de_votre_team_services</em>&gt;.visualstudio.com</a>
	</p><p>Par exemple, ici, avec un compte « Team Services » créé sous le nom « <em>myteamazure</em> », nous y accédons par le lien : <a href="https://myteamazure.visualstudio.com">https://myteamazure.visualstudio.com</a>
	</p><h1>Créer un projet Azure ML Workbench lié à Git
</h1><p>Lorsque vous souhaitez créer votre projet Azure ML Workbench ou bien utiliser un projet existant, vous pouvez spécifier l'URL vers le dépôt Git qui sera utilisé pour héberger le projet. Généralement, il est sous la forme suivante :
</p><p><a href="https://&lt;nom_de_votre_team_services&gt;.visualstudio.com/_git/&lt;nom_du_projet">https://&lt;nom_de_votre_team_services&gt;.visualstudio.com/_git/&lt;nom_du_projet</a><em>&gt; </em>
	</p><p>Par exemple, ici, le dépôt de notre Git serait :
</p><p><a href="https://myteamazure.visualstudio.com/_git/myTeamProject">https://myteamazure.visualstudio.com/_git/myTeamProject</a>
	</p><h2>Créer un nouveau projet
</h2><p>Lors de la création d'un nouveau projet dans Azure ML Workbench, il vous est possible de spécifier le l'URL de ce dépôt Git dans <strong>Visualstudio.com GIT Repository URL (optional)</strong> comme suit vis-à-vis de notre illustration :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers5.png" alt="" />
	</p><p>Une fois créé, vous pourrez utiliser le projet comme s'il avait été initialisé sans dépôt Git. Néanmoins, si par exemple vous souhaitez utiliser/êtes amené(e) un autre poste de travail, vous pourrez retrouver votre projet Azur eML avec les mêmes fichiers et le même historique d'exécution en téléchargeant celui-ci en utilisant le bouton suivant dans Azure ML Workbench :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers6.png" alt="" />
	</p><p><strong>Remarque</strong> : actuellement lorsque vous téléchargez votre projet sur un second poste de travail, il est téléchargé dans le répertoire suivant :
</p><ul style="margin-left: 54pt"><li>Sur Windows, <span style="color:#404040;font-family:Consolas">C:\Users\&lt;nom_utilisateur&gt;\Documents\AzureML
</span></li><li>Sur MacOS, <span style="color:#404040;font-family:Consolas">/home/&lt;nom_utilisateur&gt;/Documents/AzureML</span>
		</li></ul><p>Nous souhaitons souligner ici qu'il est également possible de créer le projet en ligne de commandes si vous disposer déjà d'Azure CLI ML avec la commande ci-après :
</p><p><span style="color:#404040;font-family:Consolas">az ml project create -a &lt;nom_du_compte_experimentation&gt; -n &lt;nom_du_projet&gt; -g &lt;nom_du_groupe_ressources&gt; -w &lt;nom_de_l_espace_de_travail&gt; -r &lt;URL_du_depot_GIT&gt; --vststoken &lt;cle_personnelle_vsts&gt;
</span></p><p><strong>Remarque</strong> : Vous devez être en possession d'une clé personnelle VSTS pour utiliser cette commande. Vous pouvez lire la documentation officielle à ce sujet <a href="https://docs.microsoft.com/fr-fr/vsts/git/_shared/personal-access-tokens">ici</a>.<strong>
		</strong></p><p><strong>Remarque</strong> : Pour installer Azure CLI ML sur Windows, vous devez :
</p><ul><li><span style="color:black">Installer Python depuis <a href="https://www.python.org/"><span style="color:#0050c5;font-family:Segoe UI">https://www.python.org/</span></a>. Assurez-vous de bien sélectionner l'installation de pip.
</span></li><li><div><span style="color:black">Ouvrir une invite de commandes avec des privilèges d'administration à l'aide de<strong> Run As Administrator</strong> et exécuter les commandes suivantes :
</span></div><p>
 </p></li></ul><p><span style="color:#404040;font-family:Consolas;font-size:10pt">pip install azure-cli
</span></p><p style="margin-left: 35pt"><span style="color:#404040;font-family:Consolas"><span style="font-size:10pt">pip install azure-cli-ml</span>
		</span></p><p><strong>Remarque</strong> : Pour installer Azure CLI ML sur MacOS, vous devez <span style="color:black">ouvrir une invite de commandes et exécuter les commandes suivantes :</span><span style="font-family:Segoe UI;font-size:10pt">
		</span></p><p style="margin-left: 35pt"><span style="color:#404040;font-family:Consolas">sudo -i 
</span></p><p style="margin-left: 35pt"><span style="color:#404040;font-family:Consolas;font-size:10pt">pip install azure-cli
</span></p><p style="margin-left: 35pt"><span style="color:#404040;font-family:Consolas"><span style="font-size:10pt">pip install azure-cli-ml</span>
		</span></p><h2>Lier un projet existant à un dépôt GIT
</h2><p>Si vous avez créé un projet Azure ML sans dépôt Git, vous pouvez ultérieurement mettre à jour le projet pour ajouter le lien vers le dépôt Git avec la commande ci-dessous :
</p><p><span style="color:#404040;font-family:Consolas">az ml project update –repo <a href="https://myteamazure.visualstudio.com/_git/myTeamProject">https://myteamazure.visualstudio.com/_git/myTeamProject</a>
		</span></p><p><strong>Remarque importante</strong> : Une fois qu'un projet est lié à Git, ce lien <strong>NE</strong> peut être <strong>supprimé</strong> !
</p><h1>Un projet Azure ML et GIT
</h1><p>Une fois que votre projet Azure ML est lié à un dépôt Git, une nouvelle branche est automatiquement sur votre dépôt distant appelé : <span style="color:#404040;font-family:Consolas">AzureMLHistory/&lt;Identifiant_du_projet&gt;</span>. Vous pouvez visualiser cette nouvelle branche sur « Team Services » :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers7.png" alt="" />
	</p><p>A chaque fois que vous lancez une exécution de votre projet, toute modification est automatiquement sauvegardée et poussée dans cette branche :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers8.png" alt="" />
	</p><p>Si vous souhaitez sauvegarder par vous-même vos modifications, vous pouvez faire un <em>commit</em> dans la branche <em>master</em> ou toute autre branche que vous avez créé. Cela vous permet, par exemple, de revenir dans un état antérieur tout en sauvegardant l'état dans lequel vous êtes actuellement.
</p><p>Néanmoins, si vous téléchargez ce projet sur un autre poste de travail, la version sera celle du dernier <em>commit</em> de la branche <span style="color:#404040"><span style="font-family:Consolas">AzureMLHistory/&lt;identifiant_du_projet&gt;</span><span style="font-family:Segoe UI">.</span></span>
	</p><h1>Collaborer sur un projet Azure ML
</h1><p>Pour pouvoir collaborer sur un même projet Azure ML, les autres personnes doivent disposer des autorisations dans VSTS mais aussi au niveau du compte d'expérimentation de l'espace de travail concerné.
</p><p>Vous pouvez ajouter des membres sur VSTS directement depuis l'interface web de VSTS (Cf. <a href="https://docs.microsoft.com/fr-fr/vsts/accounts/add-team-members-vs">documentation officielle</a> (en anglais) à ce sujet).
</p><p>Pour ajouter un utilisateur sur un espace de travail ou un compte d'expérimentation, vous pouvez utiliser le portail Azure ou une invite de commandes.
</p><h2>Ajouter un utilisateur via le portail Azure
</h2><p>Naviguez vers <a href="https://portal.azure.com/">le portail Azure</a>. Une fois sur celui-ci, recherchez votre compte d'expérimentation sur lequel vous voulez donnez accès puis allez dans <strong>Contrôle d'accès (IAM)</strong> :
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers9.png" alt="" />
	</p><p>Sélectionnez <strong>Ajouter des autorisations</strong>, précisez le compte utilisateur ou un groupe d'utilisateurs déclaré dans le répertoire Azure AD auquel est associé l'abonnement Azure utilisé.
</p><p style="text-align: center"><img src="https://msdnshared.blob.core.windows.net/media/2018/01/013118_1642_Collaborers10.png" alt="" />
	</p><p>Sélectionner le rôle adéquate. Les rôles principalement utilisés sont <strong>Propriétaire</strong> (lecture, écriture et gestion des droits), <strong>Contributeur</strong> (lecteur et écriture) et <strong>Lecteur</strong> (lecture seule). 
</p><h2>Ajouter un utilisateur via Azure ML CLI
</h2><p>Comme souligné précédemment, vous pouvez aussi passer par Azure ML CLI pour ajouter les droits à un utilisateur sur votre compte d'expérimentation ou votre espace de travail. 
</p><p>Pour utiliser Azure ML CLI depuis Azure ML Workbench, vous devez utiliser le menu <strong>File</strong> puis <strong>Open Command Prompt</strong> afin d'ouvrir une invite de commandes.
</p><p>La première étape est de récupérer l'identifiant de la ressource concernée sur laquelle vous souhaitez que l'utilisateur aie accès :
</p><ul><li><div>Pour un compte d'expérimentation, la commande est la suivante : <span style="color:#404040;font-family:Consolas">
				</span></div><p><span style="color:#404040;font-family:Consolas">az ml account experimentation show --query "id"
</span></p><p>
 </p></li><li><div>Pour un espace de travail, la commande est comme suit : <span style="color:#404040;font-family:Consolas">
				</span></div><p><span style="color:#404040;font-family:Consolas">az ml workspace show --query "id"
</span></p></li></ul><p>Une fois l'identifiant récupérée, vous pouvez assigner le rôle de l'utilisateur avec la commande ci-dessous :
</p><p><span style="color:#404040;font-family:Consolas">az role assignment create --assignee &lt;identifiant_azure&gt; --role [Contributor|Owner] --scope &lt;identifiant_de_la_ressource&gt;
</span></p><p>Une fois la personne ajoutée aux deux ressources, cette dernière dispose d'un accès au projet et peut télécharger celui-ci sur son poste de travail.
</p><p><strong>Remarque</strong> : Il se peut que la personne avec qui vous collaborez doive redémarrer Azure ML Workbench pour prendre en compte les modifications d'accès.
</p><h2>Travailler en équipe sur un projet Azure ML
</h2><p>L'ensemble des personnes déclarées partagent la même branche <em>master</em> et le même historique d'exécutions. Ainsi, si l'une de ces personnes exécute le projet, les autres peuvent aussi accéder à l'état du projet à cet instant.
</p><p>Il est donc parfois préférable de créer une autre branche pour ne pas avoir de souci de synchronisation entre les différentes versions d'un même projet puis d'effectuer des fusions de branche ultérieurement. Nous rentrons dans le classique de la vie d'un projet et de ses versions.
</p><p>Ceci conclut ce billet sur la configuration d'un projet d'équipe et ainsi la capacité de collaborer à plusieurs sur un même objectif : nous sommes toujours plus intelligents à plusieurs que tout seul ;-)
</p><p>
 </p>]]></content:encoded>
    </item>
    <item>
      <title>Déployer un modèle sur Azure IoT Edge</title>
      <link>https://docs.microsoft.com/archive/blogs/mlfrance/deployer-un-modele-sur-azure-iot-edge</link>
      <pubDate>Fri, 22 Dec 2017 16:12:08 GMT</pubDate>
      <dc:creator><![CDATA[Philippe Beraud - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/mlfrance/?p=8565</guid>
      <description><![CDATA[Dans le billet précédent de cette série billets sur les nouveaux services d'Azure Machine Learning...]]></description>
      <content:encoded><![CDATA[<p>Dans le billet précédent de cette série billets sur les nouveaux services d'<a href="https://azure.microsoft.com/fr-fr/overview/machine-learning/">Azure Machine Learning</a> (Azure ML), nous avons illustré la façon de déployer un modèle empaqueté dans un conteneur Docker sous forme de service web dans Azure. 
</p><p>Avec la nouvelle version de ce mois de décembre 2017 du service de gestion des modèles d'Azure ML, vous pouvez dorénavant déployer ce conteneur sur un appareil au plus près de la source des données typiquement pour les scénarios liés à l'Internet des objets (IoT). Au-delà d'un cloud « intelligent », cette approche permet de porter l'« intelligence en bordure ». C'est en particulier l'un des scénarios que permet d'aborder <a href="https://azure.microsoft.com/fr-fr/services/iot-edge/">Azure IoT Edge</a>, actuellement disponible en version préliminaire publique
</p><p>Je vous propose d'aborder tout cela dans ce billet et j'en profite pour remercier Paul Jenny actuellement en stage de fin d'étude au sein de Microsoft France pour cette contribution.
</p><h1>Une rapide présentation d'Azure IoT Edge
</h1><p>Les appareils connectés qui composent ce qu'il convient d'appeler l'IoT sont typiquement situés en bordure du cloud. Ils n'ont généralement qu'une faible puissance de calcul ainsi des capacités de connexion réseau vers l'externe limitées (protocole(s) pris en charge, consommation induite, etc.). 
</p><p>Ainsi, les rendre « intelligents » avec l'Intelligence Artificielle (IA) devient vite compliquée à mettre en place dû à ces deux contraintes (calcul, réseau).
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo1.png" alt="" />
	</p><p>Afin de s'affranchir de ces contraintes, Azure IoT Edge permet d'apporter l'intelligence jusqu'en bordure du cloud afin d'offrir un ensemble de services cloud intelligent. Vous pourrez ainsi déployer vos propres applications ou des modèles (dans ou) au plus près de vos objets connectés en bordure et traiter en local les différentes données provenant de sources locales à l'objet considéré (capteurs de température, de pression, détecteur de présence, etc.. Un cas d'exemple serait l'utilisation d'Azure IoT Edge sur un moteur d'avion pour effectuer de la maintenance prédictive en cas de détection d'un risque élevé de panne proche.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo2.png" alt="" />
	</p><h1>La mise en place d'Azure IoT Edge
</h1><p>Pour pouvoir déployer sur Azure IoT Edge, il faut au préalable avoir configuré un <a href="https://azure.microsoft.com/fr-fr/services/iot-hub/">hub Azure IoT</a> ainsi qu'avoir configuré un module.
</p><p><strong>Remarque :</strong> Vous avez besoin d'un abonnement Azure pour pouvoir effectuer la suite de ce tutoriel. Si vous n'avez encore de compte Azure, vous pouvez créer un compte gratuit <a href="https://azure.microsoft.com/free/?WT.mc_id=A261C142F">ici</a>. Nous supposons que vous disposez à ce stade d'un tel compte.
</p><p>La première étape est de configurer votre ordinateur ou votre machine virtuelle pour simuler un appareil IoT. Pour cela, vous devez installer <a href="https://docs.docker.com/docker-for-windows/install/">Docker pour Windows</a> et <a href="https://www.python.org/downloads/">Python 2.7</a> . Ensuite, via une invite de commandes, vous devez installer le paquet de contrôle d'Azure IoT avec <span style="color:#404040;font-family:Consolas">pip</span><em> </em>:
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">pip install -U azure-iot-edge-runtime-ctl
</span></p><p>Vous devez ensuite créer un hub Azure IoT sur <a href="https://portal.azure.com/">le portail Azure</a> afin de pouvoir inscrire un appareil dans ce hub. Pour cela, vous pouvez passer par Azure Cloud Shell, le Shell intégré au portail d'Azure ou plutôt effectuer les mêmes opérations graphiquement.
</p><h2>La création de hub avec Azure Cloud Shell
</h2><p>Une fois connecté au Portail Azure, vous pouvez sélectionner dans la barre de tâches en haut du portail le Shell Azure en PowerShell ou Bash :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo3.png" alt="" />
	</p><p>Il est recommandé de créer un groupe de ressources pour chaque projet afin de gérer au mieux vos ressources sur Azure. Dans le Shell situé ci-dessous, vous devez saisir la commande suivante :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">az group create --name iotedge --location westeurope
</span></p><p>Cette commande permet de créer un groupe de ressources nommé « iotedge » situé par exemple ici dans la région Azure en Europe de l'Ouest. 
</p><p><strong>Remarque :</strong> Le nom d'un groupe de ressources doit être unique à travers Azure. Il se peut ainsi que ce nom puisse déjà être utilisé par quelqu'un d'autre. 
</p><p>La seconde étape est de créer l'hub Azure IoT dans ce groupe de ressources :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">az iot hub create --resource-group iotedge --name moniothub --sku F1
</span></p><p>Cette commande permet de créer un hub IoT dans le groupe de ressources <span style="color:#404040;font-family:Consolas">iotedge</span> avec pour nom <span style="color:#404040;font-family:Consolas">moniothub</span> et le plan de tarification F1 pour les besoins de ce tutoriel (gratuit, limité à un par abonnement Azure).
</p><h2>Créer le hub depuis le portail Azure
</h2><p>Une fois connecté au portail Azure, vous pouvez sélectionner sur la droite <strong>Créer une ressource</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo4.png" alt="" />
	</p><p>Recherchez ensuite <strong>IoT Hub</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo5.png" alt="" />
	</p><p>Puis sélectionnez la ressource <strong>IoT Hub</strong> et enfin <strong>Créer</strong>.
</p><p>Dans le formulaire, vous devez indiquer le nom de votre hub IoT (il doit être unique). Choisissez ensuite le niveau de tarification F1, correspondant au niveau gratuit, suffisant pour effectuer nos tests (limité à un par abonnement Azure).
</p><p>Concernant le groupe de ressources, il est recommandé de créer un groupe de ressources pour chaque projet sur Azure afin de pouvoir organiser les ressources au mieux. Vous pouvez néanmoins en utiliser un existant si vous le souhaitez. Une fois tout ceci fait, il suffit de cliquer sur <strong>Créer</strong>.
</p><p>Il faut maintenant attendre le déploiement de cette nouvelle ressource dans Azure.
</p><h1>L'inscription d'un appareil IoT Edge
</h1><p>Une fois votre hub IoT déployé, vous pouvez maintenant ajouter un appareil IoT Edge dans celui-ci. Sur <a href="https://portal.azure.com/">le portail Azure</a>, sélectionnez votre hub sur le tableau de bord sinon recherchez-le via le menu <strong>Toutes les ressources</strong> à gauche :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo6.png" alt="" />
	</p><p>Une fois le panneau du hub ouvert, sélectionnez <strong>IoT Edge (preview)</strong> dans le menu à gauche :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo7.png" alt="" />
	</p><p>Il faut maintenant ajouter un appareil IoT à votre hub avec le bouton <strong>Add IoT Edge Device</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo8.png" alt="" />
	</p><p>Dans l'approche suggérée ici pour les besoins de notre illustration, cet appareil est votre ordinateur ou votre machine virtuelle. Dans le formulaire qui vient de s'ouvrir sur la droite, vous devrez insérer l'ID de l'appareil. Celui-ci doit être unique et doit être composé de caractères alphanumériques. Ensuite, il est préférable de laisser Azure générer automatiquement les clés SSH associées à votre appareil pour la connexion. 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo9.png" alt="" />
	</p><p>Une fois l'appareil ajouté, il faut le configurer pour accéder à votre hub IoT. Pour cela, il convient au préalable récupérer les clés de connexion. Pour ce faire, sélectionnez-le dans la liste des appareils de votre hub IoT :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo10.png" alt="" />
	</p><p>Dans la nouvelle fenêtre, copiez la <strong>Chaîne de connexion - clé primaire</strong> et conservez-la dans votre presse-papiers. 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo11.png" alt="" />
	</p><p>Vous pouvez maintenant passer à la configuration de votre appareil IoT. Ouvrez maintenant un terminal de commandes sur votre ordinateur ou machine virtuelle puis saisissez la commande suivante :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">iotedgectl setup --connection-string [VOTRE_CHAINE_CONNEXION] --auto-cert-gen-force-no-passwords
</span></p><p>Cette commande permet de configure votre appareil IoT avec votre hub IoT Azure. Deux modules (sous forme de conteneur Docker) sont ainsi déployés, à savoir :
</p><ol><li>L'agent IoT Edge qui gère le déploiement et la surveillance des modules de votre appareil IoT 
</li><li>L'agent hub IoT qui gère la communication entre vos modules et votre hub IoT.
</li></ol><p>La dernière étape consiste enfin à lancer vos modules IoT avec la commande suivante :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">iotedgectl start
</span></p><p>Vous pouvez vérifier que tout fonctionne bien avec la commande Docker qui permet de lister les conteneurs actifs :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">docker ps
</span></p><p>Vous devez avoir le conteneur basé sur l'image « <span style="color:#404040;font-family:Consolas">microsoft/azureiotedge-agent:1.0-preview</span> » qui fonctionne.
</p><h1>La création de votre image Docker
</h1><p>Pour pouvoir déployer votre modèle sur votre module IoT, la première étape est de créer l'image Docker associée à celui-ci.
</p><p>Si vous n'avez pas lu l'article sur le déploiement d'un modèle sous forme de service web <a href="https://blogs.msdn.microsoft.com/mlfrance/2017/12/22/creer-et-interroger-votre-service-web-avec-azure-ml/">ici</a>, nous vous invitons à le consulter au préalable. Les différentes étapes et explications sont décrites dans ce billet.
</p><p>Pour les besoins de ce billet, vous pouvez utiliser l'exemple fourni par le tutoriel officiel en téléchargeant le fichier score <a href="https://github.com/Azure/ai-toolkit-iot-edge/blob/master/IoT%20Edge%20anomaly%20detection%20tutorial/iot_score.py">ici</a> et le modèle <a href="https://github.com/Azure/ai-toolkit-iot-edge/blob/master/IoT%20Edge%20anomaly%20detection%20tutorial/model.pkl">ici</a>. Ensuite, il vous suffit avec une invite de commandes de saisir la commande ci-dessous dans le dossier contenant les deux fichiers précédents :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">az ml service create realtime –model-file model.pkl -f iot_score.py -n machinelearningmodule -r python
</span></p><p>Cette commande permet de créer le manifeste, de générer l'image Docker associée et enfin de publier le service web. Celui-ci est appelé <span style="color:#404040;font-family:Consolas">machinelearningmodule</span> tout comme l'image Docker.
</p><h1>Le déploiement de votre modèle en module IoT
</h1><p>Pour pouvoir récupérer l'image Docker de votre modèle, il faut ajouter la connexion au répertoire Docker à votre appareil IoT. Pour cela, il faut au préalable récupérer les identifiants de connexion de votre <span style="color:#404040;font-family:Consolas">Azure Container Registry</span> qui a été créé lors de la création de votre environnement de déploiement :
</p><p>Pour ce faire, rendez-vous sur le <a href="https://portal.azure.com/">portail Azure</a> et accédez au menu <strong>Toutes les ressources</strong> situé à droite :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo12.png" alt="" />
	</p><p>Si vous possédez plusieurs environnements de déploiements, vous pouvez utiliser la commande suivante depuis un invite de commandes pour rechercher rapidement le groupe de ressources associé à votre registre de conteneurs où l'image Docker a été déployé, :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">az ml env show -n [VOTRE_ENVIRONNEMENT] -v
</span></p><p>Recherchez dans le résultat de la commande la propriété <span style="color:#404040;font-family:Consolas">containerRegistry</span><em>
		</em>, puis <span style="color:#404040;font-family:Consolas">resourceId</span>. L'URL est sous la forme :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">[VOTRE_ID_ABONNEMENT] / resourcegroups / [VOTRE_ID_GROUPE_RESSOURCES] / providers / ….
</span></p><p>La partie importante ici est <span style="color:#404040;font-family:Consolas">[VOTRE_ID_GROUPE_RESSOURCES]</span>. Par exemple, ci-dessous, le groupe de ressources serait <span style="color:#404040;font-family:Consolas">PaulML-azureml-7f27d</span> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo13.png" alt="" />
	</p><p>Une fois que vous disposez du groupe de ressources dans lequel se trouve votre registre de conteneurs, il vous suffit de le sélectionner sur le portail Azure :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo14.png" alt="" />
	</p><p>Dans la nouvelle fenêtre, accédez au menu <strong>Clés d'accès</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo15.png" alt="" />
	</p><p>Vous aurez ainsi besoin du serveur de connexion et du nom d'utilisateur et mot de passe associés :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo16.png" alt="" />
	</p><p>Vous allez enfin pouvoir ajouter la connexion à ce répertoire Docker à votre appareil IoT. Pour cela, dans une invite de commandes, saisissez la commande suivante en remplaçant les valeurs avec les données que vous avez récupérées ci-dessus :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">iotedgectl login –address [SERVEUR_CONNEXION] –username [NOM_UTILISATEUR] –password [MOT_DE_PASSE]
</span></p><p>Une fois ceci fait, vous pouvez passer au déploiement en tant que tel du module contenant votre image Docker sur votre appareil IoT. Pour cela, toujours sur le portail Azure, allez sur votre hub IoT puis dans le menu <strong>IoT Edge (preview)</strong> puis sélectionnez votre appareil IoT. Cliquez ensuite sur <strong>Set Modules</strong> située en haut du menu :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo17.png" alt="" />
	</p><p>Nous allons à présent ajouter le module à cet appareil IoT en cliquant sur <strong>Add IoT Edge Module</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo18.png" alt="" />
	</p><p>Dans le menu déroulant à droite, vous devez donner un nom à ce module IoT puis indiquer l'image Docker sur lequel le conteneur sera basé. L'URI vers l'image est sous la forme :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">[SERVEUR_CONNEXION_DOCKER] / [NOM_IMAGE] :1
</span></p><p>Par exemple, ici, avec le nom d'image que nous avons utilisé auparavant, ce serait :
</p><p><span style="color:#404040;font-family:Consolas;font-size:10pt">mlcrparc4ff11505f691.azurecr.io/machinelearningmodule :1
</span></p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo19.png" alt="" />
	</p><p>Une fois le formulaire rempli, cliquez sur <strong>Next</strong>.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo20.png" alt="" />
	</p><p>La seconde étape permet de créer des routes personnalisées inter-modules ou avec l'hub IoT. Ici, le service web devrait fonctionner de lui-même sans personnalisation supplémentaire.
</p><p>Puis cliquez sur <strong>Next</strong> et enfin <strong>Submit</strong>. Une demande de déploiement sur votre appareil IoT est ainsi créé. Une fois celui-ci achevé, vous aurez une notification dans le portail Azure :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo21.png" alt="" />
	</p><p>Ensuite, pour pouvoir envoyer des messages à votre module IoT afin de prédire des données, deux options s'offrent à vous : i ) utiliser le portail Azure ou ii) développer votre propre solution.
</p><h1>L'envoi des messages vers votre module IoT
</h1><h2>Via un code personnalisé
</h2><p>La documentation officielle recense différents exemples pour pouvoir contacter votre module IoT dans plusieurs langages. 
</p><ul><li>Un exemple en .<a href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-csharp-csharp-c2d">NET</a> ;
</li><li>Un exemple en <a href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-java-java-c2d">Java</a> ;
</li><li>Un exemple en <a href="https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-node-node-c2d">NodeJS</a>.
</li></ul><h2>Via le portail Azure
</h2><p>Vous pouvez envoyer des messages depuis le portail Azure avec votre hub IoT. Pour cela, retournez dans la configuration de votre hub IoT. Sélectionnez ensuite le module vers lequel vous souhaitez envoyer un message puis cliquez sur <strong>Message à l'appareil</strong> :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo22.png" alt="" />
	</p><p>Entrez dans le <strong>Corps du message</strong> les données que vous souhaitez prédire selon le format attendu par votre service web :
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2017/12/122217_1623_Dployerunmo23.png" alt="" />
	</p><h1>En guise de conclusion
</h1><p>Nous espérons que ce billet vous aura permis de découvrir comment déployer un modèle d'Azure ML vers un module IoT empaqueté dans un conteneur Docker sous forme de service web. Ceci clôt notre billet.
</p><p>Enfin, si besoin, vous pouvez retrouver la documentation officielle d'Azure IoT Edge <a href="https://docs.microsoft.com/en-us/azure/iot-edge/">ici</a> ainsi que le tutoriel de démarrage <a href="https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-deploy-machine-learning">ici</a> associé.</p>]]></content:encoded>
    </item>
  </channel>
</rss>