2017-05-21 1 views
0

Je travaille sur la reconnaissance des expressions faciales avec Keras.Architecture du modèle de réseau de neurones convolution

J'ai un jeu de données avec 72 000 images. J'utilise 80% pour Train, 10% pour Validation et 10% pour Test.

Toutes les images sont en mode 48 x 48 en niveaux de gris.

Mon modèle d'architecture est comme ceci:

model = Sequential() 
model.add(Conv2D(64, 5, 5, border_mode='valid', input_shape=(img_rows, img_cols, 1))) 
model.add(PReLU(init='zero', weights=None)) 
model.add(ZeroPadding2D(padding=(2, 2), dim_ordering='tf')) 
model.add(MaxPooling2D(pool_size=(5, 5),strides=(2, 2))) 

model.add(ZeroPadding2D(padding=(1, 1), dim_ordering='tf')) 
model.add(Conv2D(64, 3, 3)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(ZeroPadding2D(padding=(1, 1), dim_ordering='tf')) 
model.add(Conv2D(64, 3, 3)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(MaxPooling2D(pool_size=(3, 3),strides=(2, 2))) 

model.add(ZeroPadding2D(padding=(1, 1), dim_ordering='tf')) 
model.add(Conv2D(128, 3, 3)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(ZeroPadding2D(padding=(1, 1), dim_ordering='tf')) 
model.add(Conv2D(128, 3, 3)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(ZeroPadding2D(padding=(1, 1), dim_ordering='tf')) 
model.add(MaxPooling2D(pool_size=(3, 3),strides=(2, 2))) 

model.add(Flatten()) 
model.add(Dense(1024)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(Dropout(0.2)) 
model.add(Dense(1024)) 
model.add(PReLU(init='zero', weights=None)) 
model.add(Dropout(0.2)) 

model.add(Dense(7)) 
model.add(Activation('softmax')) 

ada = Adadelta(lr=0.1, rho=0.95, epsilon=1e-08) 

J'ai plusieurs questions:

1/Comment choisir le nombre de couches et de leurs paramètres optimaux (les circonvolutions, Pooling Max, abandon scolaire, etc.) qui donne la meilleure performance (précision), je veux dire sur quoi? 2/Quelle est la relation entre chaque couche en terme de paramètres (Noyau et taille du filtre, pas etc.)? 3/Comme je l'ai dit, les images sont en mode de niveaux de gris 48 x 48. Est-ce bien ? Cela affecte-t-il la performance? Est-ce que mon architecture de modèle agit bien avec ces images? Utiliser des images plus grandes ou colorées améliorera les performances?

Répondre

1

réponse 1). Vous ne saurez pas avant d'essayer différentes architectures. Encore, il paierait pour vous d'automatiser le processus. Essayez de sérialiser l'architecture ou de stocker différentes architectures dans différents fichiers, sous des ID uniques. Après avoir expérimenté, vous serez en mesure de trouver celui qui a fait le mieux.

réponse 3). La couleur vous donnerait plus de fonctionnalités (R, G, B) au lieu de gris, donnant à votre classificateur plus de possibilités pour sélectionner les images correctement. Cependant, cela peut également rendre votre classificateur plus sensible aux changements dans les choses comme la balance des couleurs (en d'autres termes, le même visage, mais les photos prises en utilisant des paramètres différents). J'essaierais d'abord avec des images à échelle de gris, avant de tripler la quantité de fonctionnalités.

+0

Une réponse à la question 2? Merci –

+0

Regardez celui-ci: https://stackoverflow.com/questions/42240489/in-what-ways-are-the-output-of-neural-network-layers-useful?rq=1 - il donne une belle explication à ce que vous pourriez penser. – OZ13

+0

D'accord, merci. –