首页 > 解决方案 > 改进神经网络以识别手语

问题描述

我有一个包含 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%。任何想法如何改进?

标签: pythonkerasneural-network

解决方案


  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. 更多培训

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

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


推荐阅读