2017-01-27 2 views

Antwort

6

VGG16 Modell in sich selbst ist nur eine Reihe von Gewichten der festen Reihenfolge der Schichten und feste Faltung Kerngrößen usw. Das bedeutet nicht, dass diese Faltung Kernel nicht auf Bilder anderer Größen angewendet werden können.

Zum Beispiel in Ihrem Fall:

from keras.models import Model 
from keras.layers import Dense,Flatten 
from keras.applications import vgg16 
from keras import backend as K 

model = vgg16.VGG16(weights='imagenet', include_top=False, input_shape=(160,320,3)) 
model.summary(line_length=150) 

flatten = Flatten() 
new_layer2 = Dense(10, activation='softmax', name='my_dense_2') 

inp2 = model.input 
out2 = new_layer2(flatten(model.output)) 

model2 = Model(inp2, out2) 
model2.summary(line_length=150) 

Nach here die minimale Bildgröße kann 48x48x3 etwas über sein als das ist in Ordnung.

Nun ist es wahr, die ursprünglichen Gewichte wurden auf 224,224,3 geformte Bilder gelernt, aber die Filtergewichte fungieren als sehr guter Ausgangspunkt für neue Aufgaben mit neuen Bildern. Sie müssen das Netzwerk neu trainieren, aber das Netzwerk würde sehr schnell konvergieren. Dies ist die Grundlage des Transferlernens.

0

Es gibt zwei Dinge, die Sie tun müssen:

  1. Explizit die Eingabeform erklären für die Bildbreite und -höhe durch die Definition Keine variabler Größe Eingänge haben.
  2. Verwenden Sie nicht flatten(), da es auf der festen Eingabeform beruht. Verwenden Sie stattdessen GlobalMaxPooling, das nicht nur das adaptive Pooling durchführt, sondern auch den Eingangstensor für den FC flacht.

Ich hoffe, dass dies Ihnen helfen wird zu erreichen, was Sie was.

Verwandte Themen