卷积神经网络模型体系结构

时间:2017-05-21 10:57:10

标签: keras conv-neural-network keras-layer

我正在使用Keras进行面部表情识别。

我有一个包含72 000张图像的数据集。我使用80%用于培训,10%用于验证,10%用于测试

所有图像在灰度模式下均为48 x 48。

我的模型架构是这样的:

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)

我有几个问题:

1 /如何选择能够提供最佳性能(精确度)的层数及其最佳参数(卷积,最大池,辍学等),我的意思是基于什么?

2 /参数方面每个层之间的关系是什么(内核和过滤器大小,步幅等)?

3 /就像我说的,图像是48 x 48灰度模式。好吗 ?它会影响性能吗?我的模型架构是否适用于此图像?使用更大的图像或彩色图像会改善性能吗?

1 个答案:

答案 0 :(得分:1)

回答1)。在尝试不同的架构之前,您不会知道。不过,为您自动完成这一过程将付出代价。尝试序列化体系结构或在不同的文件中存储不同的体系结构。在您进行实验后,您将能够找到哪一个做得最好。

回答3)。颜色会为您提供更多功能(R,G,B)而不是灰色,使您的分类器有更多机会正确选择图像。但是,它也可能使您的分类器对颜色平衡(换句话说,相同的脸部,但使用不同设置拍摄的照片)的变化更敏感。我会首先尝试使用灰度图像,然后再将功能数量增加三倍。