Ich präsentiere Ihnen ein einfaches Beispiel für die Arbeit mit einem Framework für die Arbeit mit Deep Learning – TensorFlow. In diesem Beispiel bringen wir einem neuronalen Netzwerk bei, positive, negative Zahlen und Nullen zu erkennen. Installation von TensorFlow und CUDA Ich sage Ihnen, diese Aufgabe ist wirklich nicht einfach)
Um Klassifizierungsprobleme zu lösen, Klassifikatoren. TensorFlow verfügt über mehrere vorgefertigte High-Level-Klassifikatoren, für deren Funktion nur eine minimale Konfiguration erforderlich ist. Zuerst trainieren wir DNNClassifier mit Datensatz mit positiven, negativen Zahlen und Null – mit den richtigen „Beschriftungen“. Auf menschlicher Ebene ist ein Datensatz eine Reihe von Zahlen mit Klassifizierungsergebnissen (Beschriftungen):
10 – positiv
-22 – negativ
0 – Null
42 – positiv
… andere Zahlen mit Klassifizierung
Als nächstes beginnt das Training. Anschließend können Sie Zahlen eingeben, die noch nicht einmal im Datensatz enthalten waren – Das neuronale Netzwerk muss sie korrekt identifizieren.
Nachfolgend finden Sie den vollständigen Code des Klassifikators mit einem Datensatzgenerator für Trainings- und Eingabedaten:
import tensorflowImport itertoolsImport Zufälligvon Zeit Import ZeitKlasse ClassifiedNumber:__number = 0__classifiedAs = 3def __init__(selbst, Zahl):self.__number = span>Nummerif Zahl == 0:self.__classifiedAs = span> 0 # Nullelif Zahl > 0:self.__classifiedAs = span> 1 # positivelif Zahl < 0:self.__classifiedAs = span> 2 # negativdef number(selbst):return self.__Nummerdef classifiedAs(selbst):return self.__classifiedAsdef classifiedAsString(classifiedAs):if klassifiziert als == 0:Zurück "Null"elif klassifiziert als == 1:Zurück "Positiv"elif klassifiziert als == 2:Zurück "Negativ"def trainDatasetFunction():trainNumbers = []trainNumberLabels = []für i imBereich (-1000, 1001):Zahl = ClassifiedNumber(i)trainNumbers.append(number.number())trainNumberLabels.append(number.classifiedAs())return ( {"number" : trainNumbers } , trainNumberLabels)def inputDatasetFunction():global randomSeedrandom.seed(randomSeed) # um das gleiche Ergebnis zu erhaltenZahlen = []für i imrange (0, 4):Zahlen.append(random.randint(-9999999, 9999999))Zurück {"number" : Zahlen }def main():print("TensorFlow Positiv-Negativ-Null-Zahlenklassifikatortest von demensdeum 2017 (demensdeum@gmail. com)")maximalClassesCount = len(set< /span>(trainDatasetFunction()[1])) + 1numberFeature = tensorflow.feature_column. numeric_column("number")Klassifikator = tensorflow.estimator. DNNClassifier(feature_columns = [numberFeature], versteckte_Einheiten = [10, 20, 10], n_classes = maximaleClassesCount)Generator = Klassifikator.train(input_fn = trainDatasetFunction, Schritte = 1000).predict(input_fn = inputDatasetFunction)inputDataset = inputDatasetFunction()Ergebnisse = list(itertools. islice(generator, len(inputDatasetFunction()["number"])))i = 0für Ergebnis in Ergebnisse:print("number: %d klassifiziert als %s" % (inputDataset["number"][i], klassifiziertAsString(result["class_ids"][0 ])))i += 1randomSeed = time()hauptsächlich()
Alles beginnt mit der main()-Methode. Wir legen die numerische Spalte fest, mit der der Klassifikator arbeiten soll – tensorflow.feature_column.numeric_column(“number”) Als nächstes werden die Klassifikatorparameter festgelegt. Es ist sinnlos, die aktuellen Initialisierungsargumente zu beschreiben, da sich die API täglich ändert, und Sie sollten sich unbedingt die Dokumentation für die installierte Version von TensorFlow ansehen und sich nicht auf veraltete Handbücher verlassen.
Als nächstes wird das Training gestartet, das eine Funktion angibt, die einen Datensatz mit Zahlen von -1000 bis 1000 zurückgibt (trainDatasetFunction), mit der korrekten Klassifizierung dieser Zahlen basierend auf positiv, negativ oder Null. Als nächstes übermitteln wir als Eingabe Zahlen, die nicht im Trainingsdatensatz enthalten waren – zufällig von -9999999 bis 9999999 (inputDatasetFunction), um sie zu klassifizieren.
Schließlich starten wir Iterationen basierend auf der Anzahl der Eingabedaten (itertools.islice), drucken das Ergebnis aus, führen es aus und lassen uns überraschen:
number: 4063470 als positiv klassifiziertNummer: 6006715 als positiv eingestuftNummer: -5367127 als negativ eingestuftNummer: -7834276 als negativ eingestuft
Um ehrlich zu sein, bin ich immer noch ein wenig überrascht, dass der Klassifikator sogar die Zahlen *versteht*, die ich ihm nicht beigebracht habe. Ich hoffe, dass ich das Thema maschinelles Lernen in Zukunft besser verstehen werde und es weitere Tutorials geben wird.
GitLab:
https://gitlab.com/demensdeum/MachineLearning
Links:
https://developers.googleblog.com/2017/09/introducing-tensorflow-datasets.html
https://www.tensorflow.org/versions/master/api_docs/python/tf/estimator/DNNClassifier