как изменить ввод в предварительно обученной модели - PullRequest
0 голосов
/ 02 июня 2019

Я хочу изменить вход соответствующей модели VGGFACe с 224x224x3 до 64x64x3, модель содержит соответствующие веса, что позволяет изменить ее напрямую.

model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(224,224, 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
model.load_weights('vgg_face_weights.h5')

эта ошибка возникает при прямом изменении размера ввода

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

код от https://sefiks.com/2018/08/06/deep-face-recognition-with-keras/

1 Ответ

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

Последний слой с максимальным размером пула увеличивает исходное изображение до размера 2x2. Затем вы хотите применить к вашему изображению свертку с ядром 7x7, что невозможно.

Решение этой проблемы состоит в том, чтобы либо оставить исходное измерение изображений, с которыми обучалась сеть (224x224) (т. Е. Привести ваши изображения к этому измерению), либо изменить конфигурацию нейронной сети, чтобы избежать такого проблема уменьшения размерности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...