【发布时间】:2017-11-03 01:49:19
【问题描述】:
我正在尝试解决签名识别问题。我使用 GPDS 数据库,并合并了 Genuine 和 Forgery 签名的所有组合,从而产生了 400 万个 200x200 像素图像的输入。
我使用 Keras 创建了一个基本的 CNN,由于我的硬件限制,我只使用了大约 5000 个输入和最多 10 个 epoch 进行训练。我的问题是,当我开始训练模型(model.fit 命令)时,我的准确率在 50% 左右变化,这是我的数据集的平衡,当 epoch 结束时,准确率正好是 50%。当我在训练后尝试预测一些结果时,预测都是相同的(例如,全 1 表示真正的签名)。
不确定是否是以下问题:
- 局部最小值
- 解决问题复杂性的小数据集
- 权重、学习率、动量的初始化值错误……
- 培训不足
- 网络问题很简单
我是使用神经网络的新手,所以也许这只是基本问题,无论如何,有人可以帮助我吗??
代码如下:
model = Sequential()
model.add(Conv2D(100, (5, 5), input_shape=(1, 200, 200), activation='relu', data_format='channels_first'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.2))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=’adam’, metrics=['accuracy'])
model.fit(x = x, y = y, batch_size = 100, shuffle = True, epochs=10)
【问题讨论】:
-
模型可能太简单了,尝试添加一些额外的卷积层。
-
Lucas,你能有一个验证集并绘制你的训练集和验证集的损失,以确认模型是“学习”的吗?
标签: python machine-learning deep-learning keras