我尝试用 CNN 解决多字符手写问题,但我遇到了训练损失(~125.0)和验证损失(~130.0)都很高并且没有减少的问题。我在 Keras 中使用以下架构:
x = Convolution2D(32, (3, 3), padding ='same', kernel_initializer='he_normal')(model_input)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Convolution2D(32, (3, 3), kernel_initializer='he_normal')(x)
x = Activation('relu')(x)
x = MaxPooling2D(pool_size=(2, 2))(x)
x = Dropout(0.25)(x)
x = Flatten()(x)
conv_out = (Dense(512, activation='relu', kernel_constraint=maxnorm(3)))(x)
lst = [x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13]
sgd = SGD(lr=lrate, momentum=0.9, decay=lrate/nb_epoch, nesterov=False)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
在人工检查中,我发现所有预测的标签都是一个恒定序列。
有哪些可能的改进方法?训练数据似乎还可以(至少就任何一堆笔迹而言)。