改善神经网络以识别手语

时间:2019-02-13 18:09:26

标签: python keras neural-network

我有一个1680个手语示例图像的数据集。 数据集分为7个用户,每个用户执行24个英文字母中的10个字母(没有J和Z)。 我的目标是识别出哪封信。

我选择了6位用户进行培训,并选择了1位用户进行测试。

我的神经网络看起来像这样:

model = keras.models.Sequential()

model.add(keras.layers.Conv2D(32, (5, 5), input_shape=(128, 128, 3)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(128, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(BatchNormalization())

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))

model.add(keras.layers.Dense(24))
model.add(keras.layers.Activation('softmax'))

x_train, x_test, y_train, y_test = split_train_test(images, users)
opt = keras.optimizers.rmsprop(lr=0.0001, decay=1e-6)

model.compile(loss='categorical_crossentropy',
              optimizer=opt,
              metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=30, epochs=10,
    validation_data=(x_test, y_test)
).history

但是我得到的最佳精度是80%。 有任何想法如何改进吗?

1 个答案:

答案 0 :(得分:1)

  1. 修改模型

您可以尝试添加一些Conv2D层,在每个最大池化一个层之前创建两个Conv2D层的块。您也可以尝试减少最后一层的内核大小。

这里有个例子:

model = keras.models.Sequential()

model.add(keras.layers.Conv2D(32, (5, 5), input_shape=(128, 128, 3)))
model.add(keras.layers.Conv2D(32, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(keras.layers.Conv2D(64, (5, 5)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(keras.layers.Conv2D(128, (3, 3)))
model.add(keras.layers.Conv2D(128, (3, 3)))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))
model.add(keras.layers.MaxPooling2D())

model.add(BatchNormalization())

model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(512))
model.add(BatchNormalization())
model.add(keras.layers.Activation('relu'))

model.add(keras.layers.Dense(24))
model.add(keras.layers.Activation('softmax'))
  1. 更多培训

您还可以尝试在更多时期训练网络,使用keras ImageDataGenerator从现有图像中创建新图像。这样,您的模型将拥有更多数据,并且可能会提高准确性。

这是此keras类的链接:https://keras.io/preprocessing/image/#imagedatagenerator-class