Je présente à votre attention un exemple simple de travail avec un framework pour travailler avec le Deep Learning – TensorFlow. Dans cet exemple, nous allons apprendre à un réseau de neurones à détecter les nombres positifs, négatifs et zéro. Installation de TensorFlow et CUDA Je vous informe, cette tâche n’est vraiment pas facile)
Pour résoudre les problèmes de classification, classificateurs. TensorFlow dispose de plusieurs classificateurs de haut niveau prêts à l’emploi qui nécessitent une configuration minimale pour fonctionner. Nous allons d’abord entraîner DNNClassifier en utilisant ensemble de données avec des nombres positifs, négatifs et zéro – avec les « étiquettes » correctes. Au niveau humain, un ensemble de données est un ensemble de nombres avec des résultats de classification (étiquettes) :
10 – positif
-22 – négatif
0 – zéro
42 – positif
… autres numéros avec classification
Ensuite, la formation commence, après quoi vous pouvez saisir des nombres qui n’étaient même pas inclus dans l’ensemble de données – c’est à dire. le réseau de neurones doit les identifier correctement.
Vous trouverez ci-dessous le code complet du classificateur avec un générateur d’ensembles de données pour la formation et les données d’entrée :
import tensorflowimporter itertoolsimporter aléatoirede heure heure d'importationclasse ClassifiedNumber :__number = 0__classifiedAs = 3def __init__(soi, nombre) :soi.__numéro = envergure>numéroif numéro == 0 :soi.__classifiedAs = span> 0 # zéroNuméro elif > 0 :soi.__classifiedAs = span> 1 # positifNuméro elif < 0 :soi.__classifiedAs = span> 2 # négatifdef number(soi) :return self.__numérodef classifiedAs(soi) :return self.__classifiedAsdef classifiedAsString(classifiedAs) :if classé comme == 0 :retour "Zéro"elif classéAs == 1 :retour "Positif"elif classéAs == 2 :return "Negative"def trainDatasetFunction() :trainNumbers = []trainNumberLabels = []pour i in plage(-1000, 1001) :numéro = ClassifiedNumber(i)trainNumbers.append(number.number())trainNumberLabels.append(number.classifiedAs())return ( {"number" : trainNumbers } , trainNumberÉtiquettes)def inputDatasetFunction() :global randomSeedrandom.seed(randomSeed) # pour obtenir le même résultatnombres = []pour i in plage(0, 4) :nombres.append(random.randint(-9999999, 9999999))return {"number" : nombres }def main() :print("Test de classificateur de nombres TensorFlow Positif-Négatif-Zéro par demensdeum 2017 (demensdeum@gmail. com)")maximalClassesCount = len(set< /span>(trainDatasetFunction()[1])) + 1numberFeature = tensorflow.feature_column. numeric_column("numéro")classificateur = tensorflow.estimateur. DNNClassifier(feature_columns = [numberFeature], Hidden_units = [10, 20, 10], n_classes = maximalClassesCount)générateur = classificateur.train(input_fn = trainDatasetFunction, étapes = 1000).predict(input_fn = inputDatasetFunction)inputDataset = inputDatasetFunction()résultats = list(itertools. islice(générateur, len(inputDatasetFunction()["numéro"])))je = 0pour résultat dans résultats :imprimer("numéro : %d classé comme %s" % (inputDataset["number"][i], classifiéAsString(result["class_ids"][0 ])))je += 1randomSeed = time()principal()
Tout commence dans la méthode main(), nous définissons la colonne numérique avec laquelle le classificateur fonctionnera – tensorflow.feature_column.numeric_column(“number”) Ensuite, les paramètres du classificateur sont définis. Il est inutile de décrire les arguments d’initialisation actuels, car l’API change chaque jour, et vous devez absolument consulter la documentation de la version installée de TensorFlow et ne pas vous fier à des manuels obsolètes.
Ensuite, la formation est lancée en indiquant une fonction qui renvoie un ensemble de données de nombres de -1 000 à 1 000 (trainDatasetFunction), avec la classification correcte de ces nombres en fonction du positif, du négatif ou du zéro. Ensuite, nous soumettons en entrée les nombres qui ne figuraient pas dans l’ensemble de données de formation – ; aléatoire de -9999999 à 9999999 (inputDatasetFunction) pour les classer.
Enfin, nous lançons des itérations en fonction du nombre de données d’entrée (itertools.islice), imprimons le résultat, l’exécutons et sommes surpris :
numéro : 4063470 classé comme positifnuméro : 6006715 classé Positifnuméro : -5367127 classé comme négatifnuméro : -7834276 classé comme négatif
Pour être honnête, je suis toujours un peu surpris que le classificateur *comprenne* même les nombres que je ne lui ai pas enseignés. J’espère qu’à l’avenir je comprendrai le sujet de l’apprentissage automatique plus en détail et qu’il y aura plus de tutoriels.
GitLab :
https://gitlab.com/demensdeum/MachineLearning
Liens :
https://developers.googleblog.com/2017/09/introducing-tensorflow-datasets.html
https://www.tensorflow.org/versions/master/api_docs/python/tf/estimator/DNNClassifier