2017-03-01 3 views
2

Ich versuche, CIFAR10 Bilder mit vortrainierten Imagnet-Gewichtungen für die Inception v3 zu klassifizieren. Ich verwende den folgenden Code.Wie cifar10 in inceptionv3 in keras eingeben

from keras.applications.inception_v3 import InceptionV3 

(xtrain, ytrain), (xtest, ytest) = cifar10.load_data() 

input_cifar = Input(shape=(32, 32, 3)) 

base_model = InceptionV3(weights='imagenet', 
         include_top=False, 
         input_tensor=input_cifar) 

Aber es gibt mir einen Fehler wie "Negative Dimension" bei einer Zwischenkonv-Schicht.

Dies passiert nicht, wenn ich VGG16-Netzwerk verwende.

Ich benutze Keras mit Tensorflow Backend und tf Dim Bestellung.

Antwort

1

In documentation dieser Schicht kann man feststellen, dass die minimale Form des Eingangs (150, 150, 3) ist (mit tf Dim-Reihenfolge). Deine Eingabe ist viel kleiner. Diese minimale Größe kommt von mehreren pooling und valid Rand-Modus, der die Ausgabe von jeder Schicht kleiner macht - und wenn es kleiner als eine bestimmte Größe ist - ist es unmöglich, weder Pooling noch Faltung durchzuführen.

+0

Wenn es Ihnen nichts ausmacht - ich würde mich über eine Verbesserung freuen :) –

1

Inception-Netzwerk wird auf 224x224 große Bilder trainiert und ihr Down Sampling-Pfad sinkt auf etwas unter 10x10. Daher führt das Downsampling für 32,32,3 Bilder zu negativen Dimensionsgrößen. Jetzt können Sie mehrere Dinge tun. Zuerst können Sie jedes Bild im Cifar10-Datensatz auf 224x224 skalieren und diesen Tensor in das Anfangsmodell übernehmen. Sie könnten einige Downsampling-Filter des Netzwerks entfernen. Dann würde es immer noch funktionieren. Drittens könnten Sie Zero Padding verwenden, um die Bildgröße zu erhöhen, ohne die Auflösung zu ändern.

+0

Eigentlich - (150, 150, 3) ist die kleinste mögliche Größe. –