2017-01-27 2 views

ответ

6

VGG16 модель сама по себе представляет собой набор весов фиксированной последовательности слоев и фиксированных размеров ядер свертки и т. Д. Это не означает, что эти ядра свертки нельзя применять к изображениям других размеров.

Например, в вашем случае:

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) 

Согласно here минимальный размер изображения может быть 48x48x3 все, что выше, чем это хорошо.

Теперь его истинные оригинальные веса были изучены на изображениях 224,224,3, но весы фильтров являются очень хорошей отправной точкой для новых задач с новым набором изображений. Вам нужно перестроить сеть, но сеть будет сходиться очень быстро. Это основа передачи обучения.

0

Есть две вещи, которые вы должны сделать:

  1. Явное провозглашают форму ввода, чтобы иметь входы переменного размера по определению не None для ширины и высоты изображения.
  2. Donot use flatten(), поскольку он полагается на фиксированную форму ввода. Вместо этого используйте GlobalMaxPooling, который будет не только адаптивным пулом, но и сгладить входной тензор для работы FC.

Я надеюсь, что это поможет вам достичь того, что вы что.

Смежные вопросы