0

我对深度学习很陌生,我正在尝试为动漫面孔制作人脸识别器。这是我当前的代码

美国有线电视新闻网

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 个文件。

4

0 回答 0