簡體   English   中英

如何更改預訓練模型中的輸入

[英]how to change input in a pretrained model

我想將相關VGGFACe模型的輸入從224x224x364x64x3模型包含相關權重,可以直接更改它。

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/

最后一個最大池化層將您的初始圖像調整為 2x2 大小。 然后您想在圖像上應用 7x7 內核的卷積,這是不可能的。

對此的解決方案是保留訓練網絡的圖像的初始維度(224x224)(即,將您的圖像帶到該維度)或更改神經網絡的配置以避免此類降維問題.

為什么不將 64x64x3 大小的圖像調整為 224x224x3?

import cv2
img1 = cv2.imread("img1.jpg") #this is 64x64
img1_resized= cv2.resize(img1, (224, 224))

然后你可以將 img1_resized 傳遞給 VGG-Face 模型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM