Изменить входной размер сохраненной модели vggface - PullRequest
1 голос
/ 04 июня 2019

Это была неделя, когда я пытался изменить размер входного файла модели Vgg с перетренированными данными каждый раз, когда я что-то меняю, это приводило меня к ошибке. Как я могу изменить размер входного сигнала с 224x224x3 на 64x64x3, есть ли способ изменить его напрямуюбез повторного обучения модель просто использует перетренированные веса непосредственно

model.add(ZeroPadding2D((1, 1),include_top=False,input_shape=(64, 64, 3)))

model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))

model.add(Convolution2D(4096, (7, 7), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(4096, (1, 1), activation='relu'))
model.add(Dropout(0.5))
model.add(Convolution2D(2622, (1, 1)))
model.add(Flatten())
model.add(Activation('softmax'))


from keras.models import model_from_json

deep= model.load_weights('/Users/macbookpro/PycharmProjects/untitled/venv/vgg_face_weights.h5')

код: vggface

Когда я пытаюсь вызвать include_top, я получаю эту ошибку:

TypeError: ('Keyword argument not understood:', 'include_top')

Когда я напрямую изменяю размер ввода, я получаю эту ошибку:

ValueError: Negative dimension size caused by subtracting 7 from 2 for 'conv2d_14/convolution' (op: 'Conv2D') with input shapes: [?,2,2,512], [7,7,512,4096].

1 Ответ

0 голосов
/ 05 июня 2019

Прежде всего, удалите include_top=False.
Ваша проблема в том, что эта архитектура слишком глубока для ввода 64x64.В частности, эта строка:

model.add(Convolution2D(4096, (7, 7), activation='relu'))

пытается выполнить свертку 7x7 на входе размера 2x2, что невозможно.
Возможное решение - удалить свертки после последнего слоя MaxPooling и использоватьвместо этого какой-нибудь плотный слой.

...