我对深度学习很陌生,我正在尝试为动漫面孔制作人脸识别器。这是我当前的代码
美国有线电视新闻网
model = Sequential()
model.add(Convolution2D(32, 3, 3, padding='same', input_shape=input_shape))
model.add(Activation('relu'))
model.add(Convolution2D(32, 3, 3, padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Dropout(0.25))
model.add(Convolution2D(64, 3, 3, padding='same'))
model.add(Activation('relu'))
model.add(Convolution2D(64, 3, 3, padding='same'))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes, activation='sigmoid'))
return model
训练CNN
def run():
(X_train, y_train), (X_test, y_test) = datasets.load_data(img_rows=32, img_cols=32)
Y_train = np_utils.to_categorical(y_train, nb_classes)
Y_test = np_utils.to_categorical(y_test, nb_classes)
model = CNN(input_shape=X_train.shape[1:], nb_classes=nb_classes)
csv_logger = CSVLogger('../log/cnn.log')
model.compile(loss='categorical_crossentropy', optimizer = 'rmsprop', metrics=['accuracy'])
X_test = preprocess_input(X_test)
checkpointer = ModelCheckpoint(filepath="../resources/weights.hdf5", monitor="val_accuracy", verbose=1, save_best_only=True)
datagen = ImageDataGenerator(
featurewise_center=False,
samplewise_center=False,
featurewise_std_normalization=False,
samplewise_std_normalization=False,
zca_whitening=False,
rotation_range=0,
width_shift_range=0.1,
height_shift_range=0.1,
horizontal_flip=True,
vertical_flip=False ,
preprocessing_function=preprocess_input
)
datagen.fit(X_train)
history = model.fit(
datagen.flow(X_train, Y_train, batch_size=batch_size),
steps_per_epoch= round(X_train.shape[0] / batch_size),
epochs=nb_epoch,
validation_data=(X_test, Y_test),
callbacks=[csv_logger, checkpointer], batch_size=batch_size
)
有了这个,我的准确率不会超过 50%,有时甚至不会超过 10%
当我将 CNN 更改为此时,准确度达到 65% 并且不会进一步增加
model = Sequential()
model.add(Convolution2D(32, 3, 3, padding='same', input_shape=input_shape))
model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(nb_classes, activation='sigmoid')
return model
我将如何改进这一点以获得至少 90% 的准确率
有关模型的更多信息
nb_epoch = 200
batch size = 10
nb_classes = 83
数据集总共有大约 3000 个文件。