[英]vgg16 on lfw dataset Dont get RGB
我想在 LFW 数据集上使用Keras
库中的VGGNET-16
进行人脸识别。 但是生成的是灰度而不是 RGB,我无法更改它:
#load dataset
lfw_people = fetch_lfw_people(min_faces_per_person=53, resize=0.4)
# introspect the images arrays to find the shapes (for plotting)
n_samples, h, w = lfw_people.images.shape
# for machine learning we use the 2 data directly (as relative pixel
# positions info is ignored by this model)
# access the images
X = lfw_people.data
n_features = X.shape[1]
# the label to predict is the id of the person
# access the class labels
y = lfw_people.target
target_names = lfw_people.target_names
n_classes = target_names.shape[0]
print("Total dataset size:")
print("number of samples: " , n_samples)
print("number of classes: " , n_classes)
print("image dimensions: ", h, w)
print("number of features per image: ", h*w)
lfw_people.target_names
** 数组(['Ariel Sharon','Colin Powell','Donald Rumsfeld','George W Bush','Gerhard Schroeder','Hugo Chavez','Jean Chretien','John Ashcroft','Junichiro Koizumi' , '托尼·布莱尔'], dtype='<U17') **
labelNames=["Ariel Sharon", "Colin Powell", "Donald Rumsfeld", "George W Bush",
"Gerhard Schroeder", "Hugo Chavez", "Jean Chretien",
Ahcroft", "Junichiro Koizumi", "Tony Blair"]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4)
print(X_train.shape)
**
(873, 1850)
**
y_train= to_categorical(y_train, num_classes= 10)
y_test = to_categorical(y_test,num_classes= 10)
chanDim=1
改变大小
img=[]
for i in range(len(X_train)):
z=cv2.resize(X_train[i],(224,224)).astype(np.float32)
z = np.expand_dims(z, axis=0)
img.append(z)
Xnew_train=np.array(img)
img=[]
for i in range(len(X_test)):
r=cv2.resize(X_train[i],(224,224)).astype(np.float32)
r = np.expand_dims(r, axis=0)
img.append(r)
Xnew_test=np.array(img)
在这里我得到 1 的 3。bc LFW 是 RGB Xnew_train.shape
**
(873, 1, 224, 224)
**
model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , 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(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))
model.add(Flatten())
model.add(Dense(512, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))
model.summary()
# Let's train the model using RMSprop
model.compile(loss='categorical_crossentropy',
optimizer="Adam",
metrics=['accuracy'])
#model.summary()
在这里我得到错误,如果在 input_shape=(3,224,224) 中使用 1 insted of 3 测试精度非常低
#NUM_EPOCHS = 25
BS = 32
batch_size= 128
history=model.fit(Xnew_train,y_train,batch_size=batch_size,epochs=200,validation_split=0.2,verbose=1)
**错误是:
**
ValueError: Error when checking input: expected zero_padding2d_1_input to have shape (3, 224, 224) but got array with shape (1, 224, 224)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.