Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 改进神经网络识别手语_Python_Keras_Neural Network - Fatal编程技术网

Python 改进神经网络识别手语

Python 改进神经网络识别手语,python,keras,neural-network,Python,Keras,Neural Network,我有一个1680个手语示例图像的数据集。 数据集分为7个用户,每个用户执行24个英文字母中的每一个10次(不含J和Z)。 我的目标是确定提交的是哪封信 我选择了6个用户进行培训,一个用户进行测试 我的神经网络如下所示: model = keras.models.Sequential() model.add(keras.layers.Conv2D(32, (5, 5), input_shape=(128, 128, 3))) model.add(BatchNormalization()) mod

我有一个1680个手语示例图像的数据集。 数据集分为7个用户,每个用户执行24个英文字母中的每一个10次(不含J和Z)。 我的目标是确定提交的是哪封信

我选择了6个用户进行培训,一个用户进行测试

我的神经网络如下所示:

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层,在每个max pooling一层之前创建两个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'))
    
  • 更多培训
  • 您还可以尝试在更多的时期训练您的网络,使用keras
    ImageDataGenerator
    从您已有的图像创建新图像。这样,您的模型将拥有更多的数据,并可能获得更高的准确性


    下面是这个keras类的链接:

    这是一个非常有趣的问题。我不确定你是否会在StackOverflow上找到人回答你——也许在你工作的时候去拜访一下。祝你好运@尤西比乌斯:这不是对你问题的直接回答,但值得注意的是,你在这里所说的识别是指法拼写(对拼写出来的单词进行手动编码),而不是手语(包括更多)。此外,手语流利的用户不太可能在示例图像集中以接近清晰度的方式拼写每个字母;在一个单词中,从一个字母“滑动”到下一个字母是很常见的,但没有明显的字母分隔,这与即使字母的中心部分模糊,您也可以通过其形状来识别整个书面单词的方式相似。