【发布时间】:2021-08-02 11:21:20
【问题描述】:
我正在尝试从图像中读取六位数字。我使用 tensorflow/keras 进行训练。 这是我为此提出的模型:
model = Sequential()
model.add(Conv2D(20, (5, 5), padding="same", input_shape=(20, 20, 1), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Conv2D(50, (5, 5), padding="same", activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2), strides=(2, 2)))
model.add(Flatten())
model.add(Dense(500, activation="relu"))
model.add(Dense(10, activation="softmax"))
model.compile(loss="categorical_crossentropy", optimizer="adam", metrics=["accuracy"])
model.fit(X_train, Y_train, validation_data=(X_test, Y_test), batch_size=40, epochs=30, verbose=1)
我采集了 97,000 多个样本,其中 30% 用于测试。 训练后:
如您所见,样本上的结果非常好,但是当我使用相同的样本进行测试时,我几乎每 10 个项目都会得到一个错误的结果。
我匹配了训练和测试样本,它们都是一样的。这是预处理部分:
letter_image = img_number[y: y + h, x: x + w]
letter_image = cv2.copyMakeBorder(letter_image, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=(255, 255, 255))
letter_image = cv2.cvtColor(letter_image, cv2.COLOR_BGR2GRAY)
letter_image = helper.resize_to_fit(letter_image, 20, 20)
raw = letter_image
letter_image = np.expand_dims(letter_image, axis=2)
letter_image = np.expand_dims(letter_image, axis=0)
prediction = cheque_number_model.predict(letter_image)
letter = cheque_number_label.inverse_transform(prediction)[0]
如果有任何建议,我将不胜感激。 谢谢,也对不起我的英语。
【问题讨论】:
-
这很可能与测试数据的预处理有关。请发布更多代码,以便我们弄清楚。
-
感谢您的宝贵时间。我添加了预处理部分。
-
我看不到您的完整 val loss 和 val acc 但是如果它与之前时期的最终结果(大约 0.99)在同一范围内,请尝试提前停止(您可以查看 EarlyStopping 回调或训练对于更少的时期)
-
感谢您的宝贵时间。我不认为更少的时期会有所帮助。我会试试看。非常感谢。
标签: python tensorflow keras deep-learning ocr