Ich habe versucht, Transfer Learning für MNIST-Datensatz mit VGG/Inception zu verwenden. Beide Netzwerke akzeptieren jedoch Bilder mit einer Größe von mindestens 224x224x3. Wie kann ich die 28x28x1 MNIST-Bilder auf 224x224x3 skalieren, um die Übertragung durchzuführen?Wie wird das Transferlernen für den MNIST-Datensatz durchgeführt?
Antwort
Eine gängige Methode, um das zu tun, was Sie verlangen, ist einfach die Größe der Bilder auf die gewünschte Auflösung zu ändern, die für die Eingabeschicht in das CNN erforderlich ist. Da Sie Ihre Frage mit keras gekennzeichnet haben, verfügt keras über ein Vorverarbeitungsmodul, mit dem Sie Bilder laden und optional die gewünschte Größe angeben können, mit der Sie das Bild skalieren möchten. Wenn Sie sich die tatsächliche Quelle der Methode ansehen: https://github.com/keras-team/keras/blob/master/keras/preprocessing/image.py#L321, verwendet sie intern Kisseninterpolationsmethoden, um das Bild auf die gewünschte Auflösung zu skalieren.
Da die MNIST-Ziffern ursprünglich Graustufen sind, müssen Sie das Einzelkanalbild in ein Mehrkanalbild replizieren, so dass es künstlich zu RGB wird. Dies bedeutet, dass die roten, grünen und blauen Kanäle alle gleich sind und das Gegenstück zum MNIST-Graustufenbild sind. Die Methode load_img
verfügt über das zusätzliche Flag grayscale
, das Sie auf False
setzen können, um das Bild als RGB-Bild zu laden.
Sobald Sie diese Bilder in RGB konvertiert und skaliert haben, können Sie die Übertragung mit VGG19 durchführen. In der Tat wurde es schon einmal gemacht. Diesen Link finden Sie hier: https://www.analyticsvidhya.com/blog/2017/06/transfer-learning-the-art-of-fine-tuning-a-pre-trained-model/ und sehen Sie Abschnitt 6: Verwenden Sie das vortrainierte Modell zur Identifizierung der Ziffern.
Ich würde Sie gerne warnen, dass die Aufnahme eines 28 x 28 Bildes und die Größenanpassung auf ein 224 x 224 Bild starke Interpolationsartefakte haben wird. Sie würden Transfer-Lernen auf Bilddaten durchführen, die aufgrund von Upsampling Rauschen enthalten würden, aber das wurde in dem Blogpost getan, den ich vorher verlinkte. Ich würde empfehlen, dass Sie die Interpolation zu etwas wie bilinear
oder bicubic
ändern. Standardmäßig wird der nächste Nachbar verwendet, was für das Upsampling von Bildern schrecklich ist.
YMMV, versuchen Sie also, das Bild auf die gewünschte Größe der Eingabeschicht zu skalieren und das Bild mit drei Kanälen aufzufüllen, um es RGB zu machen und zu sehen, was passiert.
Dies hängt stark von dem Modell ab, das Sie verwenden möchten. Im Fall von VGGNet müssen Sie die Eingabe auf die erwartete Zielgröße umskalieren, da das VGG-Netzwerk die FC-Ebene enthält, deren Form den Bilddimensionen nach einer bestimmten Anzahl von Neuauflösungen entspricht. Beachten Sie, dass konvolutionelle Schichten jede Bildgröße aufgrund der Parameterfreigabe annehmen können.
Moderne CNNs folgen jedoch dem Trend zum Umschalten auf Faltung und lösen das Problem des willkürlichen Transferlernens. Wenn Sie diesen Pfad wählen, nehmen Sie einen der neuesten Inception models. In diesem Fall sollte das Modell außerhalb des Modells in der Lage sein, auch kleine 28 × 28 × 1-Bilder zu akzeptieren.
- 1. Wie wird die Konvertierung für das folgende Szenario durchgeführt?
- 2. Wie wird die Bilddezimierung für den Kartenleger durchgeführt?
- 3. Wie wird die Fehlerbehandlung für das Ereignis $ translateChangeSuccess durchgeführt?
- 4. Wie wird der Belastungstest durchgeführt?
- 5. Wie wird eine Gesamtkostensuche durchgeführt?
- 6. Wie wird diese Übung durchgeführt?
- 7. Wie wird die Geschwindigkeitsverkettung durchgeführt?
- 8. MATLAB/OpenCV: Wie wird das Skelett-Tracking auf Tiefenbildern durchgeführt?
- 9. Wie wird ein nicht blockierendes Schreiben auf das Gerät durchgeführt?
- 10. Wie wird eine interne Weiterleitung mit CodeIgniter für robots.txt durchgeführt?
- 11. Wie wird die Modellvalidierung in Schienen durchgeführt?
- 12. Wie wird ein Belastungstest für eine dynamische URL durchgeführt?
- 13. Wie wird die Kennwortauthentifizierung für einen LDAP-Benutzer durchgeführt?
- 14. Wie wird der Vergleich von Zeichenfolgen durchgeführt?
- 15. Wie wird eine Multi-Label-Klassifizierung (für CNN) durchgeführt?
- 16. Wie wird ein TFS Gated Check-in für TypeScript durchgeführt?
- 17. Wie wird adaptive bilineare Interpolation durchgeführt?
- 18. SAS: Wie wird eine Regression für Array-Daten durchgeführt?
- 19. Wie wird die Denormalisierung in Hbase durchgeführt?
- 20. Wie wird die Seitennummerierung für die Abfrage in Laravel durchgeführt?
- 21. Wie wird die Kollisionserkennung eine Zeitlang durchgeführt?
- 22. Wie wird ein kaskadierendes Update durchgeführt?
- 23. Wie wird die MPU6050 Beschleunigungsmesser-Temperaturkalibrierung durchgeführt?
- 24. Wie wird diese Abfrage mit RavenDb durchgeführt?
- 25. Wie wird die Mehrzeilensuche in Eclipse durchgeführt?
- 26. Wie wird diese SQL-Abfrage durchgeführt?
- 27. Wie wird der Gleichheitstest für abgeleitete Klassen durchgeführt?
- 28. Wie wird Code-Coverage-Test für Wireshark Lua Dissektor durchgeführt?
- 29. Wie wird ein guter Vergleichstest durchgeführt?
- 30. Wie wird die Variablensubstitution in JSON durchgeführt?
Vielen Dank für die Hinweise. Ich habe so etwas versucht. https://pastebin.com/Gmcb97y8 Und ich habe Typeerror: ‚Tensor‘ Objekt unterstützt keine Artikel Zuordnung – user1159517
Ich nehme einen Blick. Lass mich auf dich zurückkommen. – rayryeng