Bewertungskriterien von neuronalen Netzen

chillking

Lieutenant
Registriert
Juni 2010
Beiträge
847
Tag zusammen,

vorneweg, da das hier ja oft kommt:
- ja, das ist für eine Studienarbeit
- ja, ich habe mir bereits Gedanken gemacht und auch Suchmaschinen bedient
- nein, ich möchte nicht meine Arbeit von euch geschrieben haben
- nein, ich erwarte nicht, dass mir jemand die Lösung präsentiert
Dies dient lediglich zum Gedankenaustausch über die generelle Thematik und zur Hilfestellung bei kleinen Fragen.

Da dies nun (hoffentlich) für alle in Ordnung ist, zum Thema:

Ich suche aktuell nach Bewertungskriterien, um verschiedene neuronale Netze miteinander zu vergleichen.
Am naheliegensten ist wohl die Genauigkeit des Netzes, die bekomme ich ja auch relativ einfach.
Zusätzlich dazu ist mir noch die Effizienz in verschiedenen Punkten eingefallen. Dazu ist mir bisher Speicherverbrauch, Trainingsdauer und Auswertedauer eingefallen. Dazu hätte ich allerdings noch Fragen, die mir vielleicht jemand beantworten oder Anregungen bringen kann.

Genauigkeit:
Logisch, je höher die Trefferquote desto besser.

Speicherverbrauch:
Ich verwende Tensorflow und die Estimator-API, habe bisher aber nichts gefunden, um die Größe bzw. Speicherverbrauch des Netzes herauszufinden. Kann ich hier einfach die einzelnen Layer durchgehen und quasi die Neuronen, Gewichte und Bias zählen, um mit dem verwendeten Datentypen den benötigten Speicher zu erhalten?
Im ersten Moment würde ich behaupten, dass der Speicherverbrauch mit der Rechenzeit korreliert. Der zweite Gedanke ging dann in Richtung Parallelisierung, was meinen ersten Gedanken teilweise widerlegt. Wenn viel parallel berechnet wird, sinkt die Rechenzeit und steigt der Speicherbedarf. Wobei mich der Speicherverbrauch ja relativ wenig juckt, sofern genug Speicher vorhanden ist.

Auswertedauer:
Je schneller ich ein Ergebnis erhalte, desto besser. Ich könnte also mein Netz insofern tunen, dass die Auswertung möglichst schnell vonstatten geht (natürlich sofern die Genauigkeit in einem annehmbaren Bereich liegt).
Dazu sollte ja eigentlich reichen, wenn ich die Zeit zwischen Eingabe und Ausgabe messe. Selbst wenn ich die Hardware ändere, sollte das Ergebnis (nicht absolut aber relativ) gleich bleiben. Richtig?

Trainingsdauer:
Wie lang das Training dauert, ist eigentlich relativ egal, man muss ja nicht zuschauen. Wenn man allerdings wirtschaftlich denkt oder auch ökologisch, ist ein schnelleres Training auch was wert.
Selber Ansatz wie bei der Auswertung; einfach Zeit zwischen Start und Ende messen und vergleichen.

Wäre cool, wenn jemand eine Meinung zu den offenen Punkten hätte. Oder auch gerne neue Ideen, wie man ein Netz bewerten könnte!

Danke schon mal im Voraus!
Chill
 
Genauigkeit:
Testgenauigkeit Vs validierungsgenauigkeit

Speicher:
Ram Vs festplattenspeicher Vs grafikkartenspeicher+ram
Ergänzung ()

Anzahl Der Parameter
Anzahl Der Hyperparameter
 
Die Anzahl der Gewichte/Parameter im Netz ist sicher eine wichtige Größe. Das beeinflusst Speicherverbrauch und Performance. Das ist auch eine Information die man trivial bekommt, auch aus der Literatur, man muss die Netzwerke nicht selbst dafür ausführen.
 
ich würde erstmal die trefferquote weiter aufschlüsseln. die unterscheidung in false negatives und und false positives ist essentiell. je nach konkreter anwendung gilt es nur eines von beiden zu minimieren oder sogar zu eliminieren wärend der jeweils andere faktor geringere bedutung haben kann.

weiteres kriterium wäre echtzeitfähigkeit. also nicht fürs training selbst aber zumindest für die auswertung dann. u.u. auch für das training. kannst du mit neuen informationen trainingläufe durchführen und damit fertig sein bevor diese informationen bereits wieder veraltet sind?
 
new Account() schrieb:
Genauigkeit:
Testgenauigkeit Vs validierungsgenauigkeit
Ich würde wohl Testgenauigkeit nehmen, also wenn das Training abgeschlossen ist die Genauigkeit mit einem separaten Datensatz berechnen.

new Account() schrieb:
Speicher:
Ram Vs festplattenspeicher Vs grafikkartenspeicher+ram
Nach meinem bisherigen Stand würde ich sagen:
RAM: Gewichte, Bias, Aktivierungen, und Outputs (also was nach der Aktivierungsfunktion rauskommt), Infos zum Netzaufbau
HDD: Gewichte, Bias, Infos zum Netzaufbau
Graka: sollte ziemlich das selbe sein wie RAM

new Account() schrieb:
Anzahl Der Parameter
Anzahl Der Hyperparameter
Mit Parameter meinst die Gewichte/Bias?
Anzahl Hyperparameter verstehe ich nicht ganz, ist die nicht immer gleich?

Dalek schrieb:
Die Anzahl der Gewichte/Parameter im Netz ist sicher eine wichtige Größe. Das beeinflusst Speicherverbrauch und Performance. Das ist auch eine Information die man trivial bekommt, auch aus der Literatur, man muss die Netzwerke nicht selbst dafür ausführen.
Das stimmt, allerdings baue ich mir die Netze selbst, weswegen ich den Speicherverbrauch gern selbst "auslesen" würde.

evilnear schrieb:
ich würde erstmal die trefferquote weiter aufschlüsseln. die unterscheidung in false negatives und und false positives ist essentiell. je nach konkreter anwendung gilt es nur eines von beiden zu minimieren oder sogar zu eliminieren wärend der jeweils andere faktor geringere bedutung haben kann.
Das verstehe ich nicht, kannst dazu noch was sagen?

new Account() schrieb:
Top 1 error, top 5 error
Merci dafür! Schon 20 mal gelesen und trotzdem nicht dran gedacht :rolleyes:
 
chillking schrieb:
Ich würde wohl Testgenauigkeit nehmen, also wenn das Training abgeschlossen ist die Genauigkeit mit einem separaten Datensatz berechnen.
Beides ist wichtig, auch in Relation zueinander
chillking schrieb:
Nach meinem bisherigen Stand würde ich sagen:
RAM: Gewichte, Bias, Aktivierungen...
jein: hängt zusammen, ist Aber nicht das gleiche, z.b. hängt es auch vom Framework ab.
chillking schrieb:
Anzahl Hyperparameter verstehe ich nicht ganz, ist die nicht immer gleich?
Nein, z.b. wenn man einen zusätzlichen Dropout Layer einbaut hat man schon wieder einen Mehr.
Parameter: ja
Ergänzung ()

(Durchschnittlicher) loss
Anzahl Der layer
Durchschnittliche confidence (allgemein/fehlklassifizierung/korrektes klassifizieren)
 
Zuletzt bearbeitet:
new Account() schrieb:
Beides ist wichtig, auch in Relation zueinander
Okay, da bin ich mal gespannt, was dabei rauskommt. Meinst bei der Validierung aber den Verlauf während dem Training und nicht nur den letzten Wert oder?

new Account() schrieb:
Nein, z.b. wenn man einen zusätzlichen Dropout Layer einbaut hat man schon wieder einen Mehr.
Parameter: ja
Aha, ja das ist klar. Ich werde vermutlich den eigentlichen Aufbau zu Beginn festlegen, und dann an den Hyperparametern spielen.
Danach werde ich tatsächlich verschiedene Netzaufbauten ausprobieren, wobei das vermutlich nicht besonders viele werden.
Aber hat die Anzahl der Hyperparameter tatsächlich einen Einfluss (außer dass evtl. mehr Parameter optimiert werden müssen)?

new Account() schrieb:
jein: hängt zusammen, ist Aber nicht das gleiche, z.b. hängt es auch vom Framework ab.
hmm okay, da muss ich mich erst noch weiter vertiefen, bevor ich mitreden kann.
 
new Account() schrieb:
(Durchschnittlicher) loss
Nochmal danke!

new Account() schrieb:
Durchschnittliche confidence (allgemein/fehlklassifizierung/korrektes klassifizieren)
Als Vertrauenswert kann ich die Wahrscheinlichkeit, die softmax auspuckt, nehmen oder?
Allgemein und für Fehlklassifizierung verstehe ich noch nicht, einer falschen Klassifizierung sollte ich doch garnicht vertrauen?!

Bezüglich Hyperparameter:
Ich meinte eher: Die Anzahl an Hyperparametern juckt mich ja eigentlich nicht, ich kann mir gerade nicht vorstellen, inwiefern das ein Bewertungskriterium sein könnte.

new Account() schrieb:
Du kannst auch ein trainiertes Netz validieren.
Kurz für mich (auch wenn das vermutlich peinlich wird): Validierung ist während dem Training (alle k Schritte oder einmal pro Epoche o.ä. mit kleinem Datensatz) oder nach dem Training?


Bin mal eine Weile afk, nur dass dich nicht wunderst! Danke schon mal für deinen Input!
 
Zuletzt bearbeitet:
chillking schrieb:
Allgemein und für Fehlklassifizierung verstehe ich noch nicht, einer falschen Klassifizierung sollte ich doch garnicht vertrauen?!
Angenommen tertiäre Klassifizierung:
A 20%
B 0%
C 80%

-> nn ist sehr sicher, dass b nicht Der fall ist, Aber bei a ist es nicht so sicher (sonst würde da auch 0 stehen)
chillking schrieb:
Ich meinte eher: Die Anzahl an Hyperparametern juckt mich ja eigentlich nicht, ich kann mir gerade nicht vorstellen, inwiefern das ein Bewertungskriterium sein könnte.
Wahrscheinlich where nicht in deinem Fall.
Könnte Aber relevant sein, wenn du z.b. die Hyperparameter mit einem Algorithms bestimmst.
Ich listed nur Kriterien :)
chillking schrieb:
Kurz für mich (auch wenn das vermutlich peinlich wird): Validierung ist während dem Training (alle k Schritte oder einmal pro Epoche o.ä. mit kleinem Datensatz) oder nach dem Training?
Validieren ist das Validierungsset durchs NN zu jagen und schauen was rauskommt.
 
Zuletzt bearbeitet:
*ichschmeißmaleinenfettenSteinhierindenruhigenteich*

öhm, schon klar dass das Copyright hier CB kassiert !? Nach meinen letzten Eindrücken hier im Forum,
oder liege ICH komplett falsch ?
 
@new Account() Merci!

new Account() schrieb:
Angenommen tertiäre Klassifizierung:
A 20%
B 0%
C 80%
Ah dann hab ich das falsch verstanden, es ging nicht um fehlerhafte Klassifizierung sondern um den Unterschied true/false/positive/negative.
Ergibt Sinn! Danke!

evilnear schrieb:
ich würde erstmal die trefferquote weiter aufschlüsseln. die unterscheidung in false negatives und und false positives ist essentiell. je nach konkreter anwendung gilt es nur eines von beiden zu minimieren oder sogar zu eliminieren wärend der jeweils andere faktor geringere bedutung haben kann.
Habe ich mittlerweile verstanden und aufgenommen, danke!

evilnear schrieb:
weiteres kriterium wäre echtzeitfähigkeit. also nicht fürs training selbst aber zumindest für die auswertung dann. u.u. auch für das training. kannst du mit neuen informationen trainingläufe durchführen und damit fertig sein bevor diese informationen bereits wieder veraltet sind?
Das ist tatsächlich ein wichtiger Punkt, daher habe ich die Auswertedauer aufgenommen. Training ist bei mir nicht ganz so gravierend.
Zur Laufzeit trainieren halte ich wegen der verwendeten Hardware für nicht möglich (und ist hoffentlich auch nicht nötig).
 
Das folgende Paper ist eventuell interessant:
Barret Zoph, Vijay Vasudevan, Jonathon Shlens, Quoc V. Le: Learning Transferable Architectures for Scalable Image Recognition. arXiv:1707.07012v4

Eventuell auch jenes, wobei ich das fairerweise nicht ganz gelesen habe - war aber auf meiner Liste:
Corrado, G.S.; Davis, A.; Dean, J.; Devin, M.: Tensorflow: Large-scale machine learning on heterogeneous distributed systems. arXiv:1603.04467)
 
  • Gefällt mir
Reaktionen: chillking
chillking schrieb:
Was haltet ihr vom F1 Score (oder je nachdem F{alpha})?
Was genau soll die Frage? F1 Score ist eins von vielen Measures für binäre Klassifikation. Was genau willst du jetzt hören? Kannst auch MCC nehmen, oder Jaccard, oder ...

Insgesamt verstehe ich noch nicht ganz den Sinn von deinem Projekt. Was soll denn am Ende dabei herauskommen?
 
Zurück
Oben