机器学习算法,从单个输入提供多个输出

数据挖掘 机器学习 Python 深度学习 ocr
2022-02-23 00:46:40

我需要一些帮助,我正在解决一个问题,我有发票图像的 OCR,我想从中提取某些数据,如发票编号、金额、日期等,这些都存在于 OCR 中。我尝试使用分类模型,我将每个句子从 OCR 单独传递到模型并预测发票编号或日期或其他任何内容,但这种方法需要很多时间,我认为这是不正确的方法。

所以,我在想是否有一种算法可以让我有一个输入字符串并从该字符串映射输出,比如发票号、日期和金额都存在于字符串中。

例如: Inp 字符串:发票 #1234 将于 2018 年 10 月 12 日到期,金额为 287 输出:发票编号:#1234,日期:2018 年 10 月 12 日,金额 287

所以,我的问题是,有没有一种算法可以让我在多张发票上训练然后做出预测?

1个回答

Keras 功能 API 是您可以解决问题的一种方式。使用 keras 函数式 API,我们可以构建更像图的模型,如下所示:

在此处输入图像描述

为了构建这样的模型,您可以使用 keras,如下所示:

from keras.models import Model
from keras import layers
from keras import Input

input_layer = Input(shape=(100,), dtype='float32', name="Input")
split_layer = layers.Dense(32, activation='relu', name='split_layer')(input_layer)
first_layer = layers.Dense(32, activation='relu', name='first_layer')(split_layer)
second_layer = layers.Dense(32, activation='relu', name='second_layer')(split_layer)
model = Model(input_layer,[first_layer, second_layer])
model.summary()

为了编译这个模型,我们可以为不同的层定义不同的损失函数

model.comile(optimizer=optimizer, 
            loss={'first_layer':'mse', 'second_layer':'binary_crossentropy'},
            metrics=['accuracy'])

完成网络构建后,您可以简单地按如下方式拟合数据:

model.fit(X,
        {'first_layer': first_layer_Y,
         'second_layer': second_layer_targets},
          epochs=10
        )