【发布时间】:2017-10-21 02:48:35
【问题描述】:
我正在使用 Keras 进行面部表情识别。
我有一个包含 72000 张图像的数据集。我将 80% 用于 Train,10% 用于 Validation 和 10% 用于 Test。
灰度模式下所有图像均为 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/ 如何选择能提供最佳性能(准确度)的层数及其最佳参数(卷积、最大池化、Dropout 等),我的意思是基于什么?
2/ 在参数(内核和过滤器大小、步幅等)方面,每一层之间的关系是什么?
3/ 就像我说的,图像是 48 x 48 灰度模式。好吗 ?会影响性能吗?我的模型架构是否适合这些图像?使用更大的图像或彩色图像会提高性能吗?
【问题讨论】:
标签: keras conv-neural-network keras-layer