python - 改进神经网络以识别手语
问题描述
我有一个包含 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%。任何想法如何改进?
解决方案
- 修改模型
您可以尝试添加一些 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'))
- 更多培训
您还可以尝试在更多时期训练您的网络,使用 kerasImageDataGenerator
从您已有的图像中创建新图像。这样,您的模型将拥有更多数据,并且可能会提高准确性。
这是此 keras 类的链接:https ://keras.io/preprocessing/image/#imagedatagenerator-class
推荐阅读
- node.js - 节点 axios 返回空状态和 curl 返回 200 为 tiktok
- validation - 我正在尝试使用 Google 表格中的数据验证来仅接受十六进制颜色 - 任何帮助表示赞赏
- javascript - 刷新页面的一部分,部分在 rails
- python - 从列表中获取数字并绘制模式
- signalr - 循环中的 SignalR
- python - 这个“自我未定义”错误是范围问题吗?
- javascript - 如何声明函数以便在 Typescript 中分配对象时可用?
- c# - c#(Linq)中的自由文本搜索多列
- typescript - 将方法签名限制为仅允许事件映射中定义的类型的有效负载
- python - A.split(B) 其中 a 和 b 是音频文件