Servus zusammen, ich arbeite aktuell an nem Hobbyprojekt wo ich eine Sprache automatisiert in eine andere übersetzen will. Dafür erstelle ich mir Modelle mittels TensorFlow. Das Training der Modelle ist leider recht rechenintensiv, daher wollte ich das TensorFlow meine Grafikkarte nutzt anstelle der CPU. Zu meiner Überraschung war das aktivieren der Grafikkarte alles andere als trivial :D Ich hab das mal hier dokumentiert: https://nerd-corner.com/de/tensorflow-gpu-aktivieren-unter-windows/ und für die internationalen https://nerd-corner.com/enable-tensorflow-gpu-under-windows/ Als nächstes würde ich den Ablauf der Datenverarbeitung und Modellerstellung dokumentieren.
So die gute Nachricht ist ich habe mittlerweile einen Prototypen der einigermaßen funktioniert. Ich haber allerdings auf dem Weg dahin sehr sehr viele Fehler gemacht und extrem viel Zeit mit Tensorflow.js verschwendet. Würde zukünftig nur noch die Python Version benutzen. Die Unterschiede der beiden Libraries habe ich jetzt mal hauptsächlich für mich selbst dokumentiert: https://nerd-corner.com/de/tensorflow-js-oder-tensorflow-nutzen/ Aber auch wieder eine englische Version gemacht, weil ich mir gedacht habe eigentlich kann die Doku auch anderen Leuten helfen: https://nerd-corner.com/tensorflow-js-vs-tensorflow-python/ Als nächstes habe ich vor die Unterschiede bei der Datenverarbeitung im direkten Vergleich zu zeigen. Das wird allerdings sehr aufwendig und wird daher nicht allzubald erscheinen...
Josef schrieb: > Zu meiner Überraschung war das aktivieren der Grafikkarte alles andere > als trivial :D Aus eigener mitunter leidvoller Erfahrung kann ich Dir sagen, daß die Installation von Tensorflow, CUDA, cuDNN etc. aufgrund der inhärenten Versionsabhängigkeiten auch unter Linux kein großes Vergnügen ist -- insbesondere auch, weil die Dokumentation von NVidia leider kein sehr übersichtliches Machwerk ist. Darüber hinaus habe ich gesehen, daß Du die Python-Distribution Anaconda verwendest. Das ist unter Windows zweifellos keine schlechte Wahl. Aber: bitte achte dann darauf, nur mit "conda" zu installieren. Eine Mischung zwischen "conda" und "pip" führt leider häufig zu Problemen. Josef schrieb: > So die gute Nachricht ist ich habe mittlerweile einen Prototypen der > einigermaßen funktioniert. Darf ich fragen, was für ein Modell Du verwendest, woher Du Deine Trainingsdaten hast und wie umfangreich diese sind? > Ich haber allerdings auf dem Weg dahin sehr > sehr viele Fehler gemacht und extrem viel Zeit mit Tensorflow.js > verschwendet. Alles gut, ML- und DL-Anwendungen sind ausgesprochen komplex und besonders der Einstieg ist nicht ganz einfach und die Dokumentation bisweilen sowohl unübersichtlich als auch manchmal nicht ganz vollständig. Viele Dinge sind daher leider nur per Trial&Error herauszufinden. > Würde zukünftig nur noch die Python Version benutzen. Das ist sicherlich die bessere Wahl. Wenn man solche komplexen Dinge macht kann man darauf verzichten daß einem auf noch die Syntax, die Designfehler und die Limitierungen der Programmiersprache im Weg stehen. Ganz abgesehen von der Performance, versteht sich. Viel Spaß und Erfolg bei Deinem Projekt -- und ich freue mich schon darauf weitere Dokumentationen von Dir zu lesen! :-)
Hey, ja ich nutze da kaggle.com um genau zu sein, habe ich mir für meinen Protoypen diesen Datensatz heruntergeladen: https://www.kaggle.com/datasets/devicharith/language-translation-englishfrench Was das Modell angeht habe ich noch wenig Erfahrung und daher ein bestehendes übernommen. In meinem Fall habe ich von dem hier abgekupfert: https://www.kaggle.com/code/ahmedgamal12/model-machine-translation-from-eng-fr/input Am Code habe ich paar Änderungen vorgenommen, aber letztlich basiert er zum Großteil auf dem Beispielcode. Was jetzt speziell mein Projekt angeht muss ich statt eines Englisch - Französisch Datensatzes einen Deutsch - Bairischen Datensatz erstellen. Ich habe vor mir ebenfalls von Kaggle einen Deutsch - Englischen Datensatz herunterzuladen und dann mit Hilfe der Webseite https://dialektl.com/ die deutschen Wörter und Texte automatisiert zu übersetzen und mit den Übersetzungen die englische Spalte des Datensatzes zu überschreiben. Anschließend würd ichs dann nochmal manuell prüfen. :)
Josef schrieb: > Hey, ja ich nutze da kaggle.com um genau zu sein, habe ich mir für > meinen Protoypen diesen Datensatz heruntergeladen: > https://www.kaggle.com/datasets/devicharith/language-translation-englishfrench > > Was das Modell angeht habe ich noch wenig Erfahrung und daher ein > bestehendes übernommen. In meinem Fall habe ich von dem hier > abgekupfert: > https://www.kaggle.com/code/ahmedgamal12/model-machine-translation-from-eng-fr/input Interessant, ein Modell mit einem Encoder und einem Decode mit je zwei kleinen (256 Einheiten) LSTMs, und trotzdem kommt es schon auf über 20 Millionen trainierbare Parameter. Die Ergebnisse des Trainings (Loss und Accuracy) sehen aber schon sehr vielversprechend aus, viel Spaß und viel Glück damit! Tipp: vielleicht magst Du mal versuchen, anstelle der LSTMs einmal GRUs (Gated Recurrent Units) zu verwenden, die kommen häufig auf ähnlich gute Ergebnisse wie LSTMs, sind aber aufgrund ihrer einfacheren Architektur etwas weniger rechenintensiv und darum meistens schneller. > Am Code habe ich paar Änderungen vorgenommen, aber letztlich basiert er > zum Großteil auf dem Beispielcode. Was jetzt speziell mein Projekt > angeht muss ich statt eines Englisch - Französisch Datensatzes einen > Deutsch - Bairischen Datensatz erstellen. Ich habe vor mir ebenfalls von > Kaggle einen Deutsch - Englischen Datensatz herunterzuladen und dann mit > Hilfe der Webseite https://dialektl.com/ die deutschen Wörter und Texte > automatisiert zu übersetzen und mit den Übersetzungen die englische > Spalte des Datensatzes zu überschreiben. Anschließend würd ichs dann > nochmal manuell prüfen. :) Tja, die Datenaufbereitung -- oder, in Deinem Falle: Erstellung -- ist bedauerlicherweise ein Aufwand, den einem keiner abnimmt. Aber würdest Du nicht anstelle eines englisch-französischen Dataset nicht vielleicht mit einem englisch-deutschen etwas weniger Arbeit haben? Wie gesagt, ich finde das Projekt wirklich interessant und freue mich, zukünftig mehr darüber lesen zu dürfen. Viel Spaß, Glück und Erfolg, und bitte laß' uns (okay: mich) wissen, wie es weitergeht... :-)
Vielen Dank! Das mit den GRU's ist ein guter Tipp! Ich bleib zunächst bei meinem jetztigen Modell, werd das aber im Anschluss mal vergleichen (wenn ich da noch genauso motiviert bin wie jetzt :D ) Das war etwas missverständlich ausgedrückt, ich habe zwar für mein Modell einen eng-franz Datensatz benutzt, werde aber zum Erstellen meines eigenen Datensatzes von einem deutsch-englischem Datensatz beginnen. So, ich hatte die Woche mir einfach fest vorgenommen weiter zu machen und habe daher alles was ich bisher gelernt habe dokumentiert. Dabei habe ich besonderen Wert darauf gelegt immer direkt Python mit JS zu vergleichen. Wie gesagt ich habe leider mit JS gestartet, aber wollte meine Erkentnisse nicht verlieren, daher habe ich es gemeinsam dokumentiert. Weil so viel wurde musste ich es in 2 Teile aufspalten: Teil 1: https://nerd-corner.com/de/nlp-anwendung-tensorflow-js-vs-tensorflow-python-teil-1/ (DE Version) https://nerd-corner.com/nlp-application-tensorflow-js-vs-tensorflow-python-part-1/ (EN Version) Teil 2: https://nerd-corner.com/de/nlp-anwendung-tensorflow-js-vs-tensorflow-python-teil-2/ (DE Version) https://nerd-corner.com/nlp-application-tensorflow-js-vs-tensorflow-python-part-2/ (EN Version) Jetzt hält mich eigentlich nichts mehr davon ab mit dem Aufbau des Bairischen Datensatzes zu beginnen :D
Wie wäre es mit einem Coral-USB-Stecker? https://coral.ai/products/accelerator Wäre das auch geignet?
Josef schrieb: > Das mit den GRU's ist ein guter Tipp! Ich bleib zunächst bei meinem > jetztigen Modell, werd das aber im Anschluss mal vergleichen (wenn ich > da noch genauso motiviert bin wie jetzt :D ) Du kannst die GRUs genauso wie die LSTMs verwenden. Einfach die LSTM()-Konstruktoren durch GRU()-Konstruktoren austauschen. Wenn ich mich recht entsinne, unterstützen beide dieselben Argumente. Erfahrene Pythonisten würden daher vielleicht etwa so etwas schreiben:
1 | # LSTM und GRU aus tensorflow importieren |
2 | from argparse import ArgumentParser |
3 | |
4 | if __name__ == '__main__': |
5 | parser = ArgumentParser(description='...') |
6 | parser.add_argument('--celltype', '-t', choices=['LSTM', 'GRU'], \ |
7 | default='LSTM', help='cell type') |
8 | args = parser.parse_args() |
9 | |
10 | CellType = LSTM |
11 | if args.celltype == 'GRU': |
12 | CellType = GRU |
13 | print(args, CellType) # demo... |
In Deinen Modellen kannst Du dann einfach die LSTM()-Aufrufe durch "CellType()" ersetzen und mit dem Schalter "--celltype" oder "-t" beim Aufruf des Programms auf der Kommandozeile bestimmen ob Du LSTMs oder GRUs benutzen möchtest. > Teil 1: > Teil 2: > [...] Wow, tolle Arbeit, Respekt! Habe es bisher leider nur kurz überfliegen können denn morgen wartet ein Swarm-Cluster auf meine Aufmerksamkeit -- wenn ich danach noch Kapazitäten habe lese ich mal genauer hinein. Und ansonsten habe ich spannenden Lesestoff fürs Wochenende. ;-) Tipp: durch die Kombination der Python-Module "logging" und "json" kannst Du schöne maschinenlesbare Logdateien im JSON-Format ausgeben:
1 | import json |
2 | import logging |
3 | logging.basicConfig( |
4 | format='%(asctime)s %(levelname)s %(message)s', |
5 | stream=sys.stdout, # loggt auf stdout, ansonsten file='log.txt' |
6 | level=logging.DEBUG |
7 | ) |
8 | |
9 | logging.debug(json.dumps({'text': 'Nachricht', 'value': 4}) |
Ich bin mir übrigens nicht ganz sicher ob SparseCategoricalCrossEntropy wirklich sinnvoll ist. Vielleicht könnte eine andere Fehlerfunktion wie RMSE dort besser performen? Denn Du hast doch nicht wirklich kategoriale Targets, oder? Ich würd jedenfalls mal mit mit der Lossfunktion spielen. Das kannst Du auch ähnlich wie oben mit dem CellType machen... Letzter Tipp vom Klugschieter für heute: CellType, LossFunction und alle anderen Parameter immer zumindest beim Programmstart loggen damit Du bei Deinen Auswertungen nicht durcheinander kommst. :-) > Jetzt hält mich eigentlich nichts mehr davon ab mit dem Aufbau des > Bairischen Datensatzes zu beginnen :D Ich würde Dir gerne meine Hilfe anbieten aber mein Bairisch ist leider zwischen schlecht und nicht vorhanden... Viel Spaß und Erfolg, bisher ist das wirklich saucool und ich bin noch gespannter als vorher schon! :-)
Benedikt L. schrieb: > Wie wäre es mit einem Coral-USB-Stecker? > https://coral.ai/products/accelerator > > Wäre das auch geignet? Vermutlich eher nicht, nein. Wenn ich den TO richtig verstehe benutzt er einen richtigen PC mit einer richtigen Grafikkarte - und die unterstützt Tensorflow vollständig inklusive LSTMs und GRUs. Die Coral-Beschleuniger können hingegen nur Tensorflow Lite und wenn ich mich recht entsinne gibt es dort keine Unterstützung für diese beiden Typen. Die Dinger von Coral sind für Rechner ohne TF-kompatible GPU wie Raspberry Pi gedacht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.