我正在和Keras一起研究面部表情识别。
我有一个有72000张图像的数据集。我使用80%的列车,10%的验证和10 %的测试。
所有图像在灰度模式下为48x48。
我的模型架构是这样的:
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/如何选择层数及其最优参数(卷积、最大池、Dropout等)这提供了最好的性能(准确性),我的意思是基于什么?
2/从参数(内核和滤波器大小、步幅等)来看,每一层之间的关系是什么?
3/就像我说的,图像是48x48灰度模式。很好吗?会影响演出吗?我的模型架构对这些图像有好处吗?使用更大的图像或彩色的会提高性能吗?
发布于 2017-05-21 11:10:06
答覆1)。除非您尝试不同的架构,否则您不会知道。尽管如此,它还是会为你的自动化过程付出代价。尝试序列化架构或将不同的架构存储在不同的文件中,在唯一的ID下。在您进行实验之后,您将能够找到哪个架构做得最好。
回答3)。颜色会给你更多的特征(R,G,B)而不是灰色,让你的分类器有更多的机会正确选择图像。然而,它也可能使你的分类器对颜色平衡(换句话说,同一张脸,但是用不同的设置拍摄的照片)的变化更加敏感。我会先尝试使用灰度图像,然后再将功能数量增加三倍。
https://stackoverflow.com/questions/44096021
复制相似问题