我有一个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%。 有任何想法如何改进吗?
答案 0 :(得分: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'))
您还可以尝试在更多时期训练网络,使用keras ImageDataGenerator
从现有图像中创建新图像。这样,您的模型将拥有更多数据,并且可能会提高准确性。
这是此keras类的链接:https://keras.io/preprocessing/image/#imagedatagenerator-class