6

Ich teste die gedruckten Ziffern (0-9) auf einem Convolutional Neural Network. Es gibt 99+% Genauigkeit auf dem MNIST-Datensatz, aber wenn ich es mit Schriftarten auf dem Computer (Ariel, Calibri, Cambria, Cambria Mathe, Times New Roman) versucht und trainiert die Bilder von Schriftarten (104 Bilder pro Schriftart (Total 25 Fonts -.? 4 Bilder pro Schriftart (kleiner Unterschied)) die Trainingsfehlerquote geht nicht unter 80%, dh 20% Genauigkeit WarumZiffernerkennung auf CNN

hier "2" Anzahl Bilder Probe -

"2" Number Images

Ich skalierte jedes Bild 28 x 28.

Hier ist mehr Detail: -

Trainingsdatengröße = 28 x 28 Bilder. Netzparameter - Wie LeNet5 Architektur von Network -

Input Layer -28x28 
| Convolutional Layer - (Relu Activation); 
| Pooling Layer - (Tanh Activation) 
| Convolutional Layer - (Relu Activation) 
| Local Layer(120 neurons) - (Relu) 
| Fully Connected (Softmax Activation, 10 outputs) 

Dies funktioniert, so dass 99 +% Genauigkeit auf MNIST. Warum ist das bei computergenerierten Schriften so schlimm? Ein CNN kann viel Varianz in Daten verarbeiten.

+0

Was ist die vollständige Topologie, die Sie verwenden? Ist es das Original LeNet5, oder haben Sie eine der versteckten Ebenen verändert? Wenn Sie ein neues Modell von Grund auf neu trainieren, sollte die Überanpassung wie eine weitere Erfolgsquote von über 99% aussehen. Ihre 20% deuten auf ein ganz anderes Problem hin. – Prune

+0

Ja, es ist original LeNet5, Layers sind wie oben erwähnt, Es arbeitet mit MNIST-Dataset, aber nicht mit meinem Dataset, Meine Dataset-Größe ist 1036 Bilder, 104 pro Nummer. – kumar030

Antwort

0

Es kann ein Problem der Überanpassung sein. Dies kann passieren, wenn Ihr Netzwerk zu komplex ist, um das Problem zu lösen. Überprüfen Sie diesen Artikel: http://es.mathworks.com/help/nnet/ug/improve-neural-network-generalization-and-avoid-overfitting.html

+0

sollte ich Schichten aus dem Netzwerk entfernen, jeden Vorschlag, den Sie zur Verfügung stellen können. – kumar030

+0

Ich bin nicht sehr dumm mit CNN, aber ich denke, Sie könnten zu viele versteckte Schichten haben. Vielleicht kann dies für Sie nützlich sein: http://cs231n.github.io/neural-networks-1/#arch << ... es scheint, dass kleinere neuronale Netze bevorzugt werden können, wenn die Daten nicht komplex genug sind, um zu verhindern überarbeiten. >> –

+0

Wie viele Epochen trainierst du dein Netzwerk? Wie groß ist Ihr Datensatz? –

0

Es sieht definitiv wie ein Problem der Überanpassung aus. Ich sehe, dass Sie zwei Faltungsschichten, zwei max Pooling-Schichten und zwei vollständig verbunden haben. Aber wie viele Gewichte insgesamt? Sie haben nur 96 Beispiele pro Klasse, die sicherlich kleiner ist als die Anzahl der Gewichte, die Sie in Ihrem CNN haben. Denken Sie daran, dass Sie mindestens 5 Mal mehr Instanzen in Ihrem Trainingset haben möchten als Gewichte in Ihrem CNN.

Sie haben zwei Lösungen, um Ihre CNN zu verbessern:

  • schütteln jede Instanz im Trainingssatz. Du hast jede Nummer um 1 Pixel herum. Es wird bereits Ihr Trainingssatz mit 9 multiplizieren.
  • Verwenden Sie eine Transformatorschicht. Es fügt jeder Zahl in jeder Epoche eine elastische Verformung hinzu. Es wird stark das Lernen stärken, indem Sie Ihr Trainingsprogramm künstlich erhöhen. Außerdem wird es viel effektiver sein, andere Schriftarten vorherzusagen.
2

Ich sehe zwei mögliche Probleme:

Preprocessing: MNIST ist nicht nur 28px x 28px, sondern auch:

Die ursprüngliche Schwarzweiss (Bi-Level) Bilder von NIST waren Größe normalisiert, um in eine 20x20-Pixel-Box zu passen, während ihr Seitenverhältnis beibehalten wird. Die resultierenden Bilder enthalten Graustufen als Ergebnis der Antialiasing-Technik, die von dem Normalisierungsalgorithmus verwendet wird. Die Bilder wurden in einem 28 × 28-Bild zentriert, indem der Massenschwerpunkt der Pixel berechnet und das Bild so verschoben wurde, dass dieser Punkt in der Mitte des 28 × 28-Feldes lag.

Quelle: MNIST website

Overfitting:

  • MNIST hat 60.000 Trainingsbeispiele und 10.000 Testbeispiele. Wie viele haben Sie?
  • Haben Sie Dropout versucht (siehe paper)?
  • Haben Sie Dataset Augmentation-Techniken versucht? (z. B. leicht das Bild verschieben, wahrscheinlich das Seitenverhältnis ein wenig ändern, könnten Sie auch Rauschen hinzufügen - aber ich glaube nicht, dass diese helfen)
  • Haben Sie kleinere Netzwerke versucht? (Und wie groß sind Ihre Filter/wie viele Filter haben Sie?)

Bemerkungen

Interessante Idee! Haben Sie versucht, einfach das trainierte MNIST-Netzwerk auf Ihre Daten anzuwenden? Was sind die Ergebnisse?

+1

Gute Punkte. Nur um eine weitere Option hinzuzufügen, könnte auch Batch-Normalisierung (https://arxiv.org/abs/1502.03167) in Betracht gezogen werden. –