Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow CNN+LSTM OCR模型未正确预测“is”_Tensorflow_Deep Learning_Ocr_Lstm_Convolutional Neural Network - Fatal编程技术网

Tensorflow CNN+LSTM OCR模型未正确预测“is”

Tensorflow CNN+LSTM OCR模型未正确预测“is”,tensorflow,deep-learning,ocr,lstm,convolutional-neural-network,Tensorflow,Deep Learning,Ocr,Lstm,Convolutional Neural Network,我已经在tensorflow中为OCR制作了一个具有以下结构的模型。我在一个相当大的数据集250K的图像上对它进行了训练,并且获得了大约94%的准确率。但该模型预测,大多数情况下是1s或1s。我检查了数据集,它包含了相当多的is实例,所以我认为数据集不是问题所在。此外,该模型还可以正确预测何时它是另一个单词(如this或christian)的一部分。这种行为的原因可能是什么?我如何改进模型以进行检测 我试过的东西 减少maxpool层的数量 对maxpool层使用2x1内核 Input: (?,

我已经在tensorflow中为OCR制作了一个具有以下结构的模型。我在一个相当大的数据集250K的图像上对它进行了训练,并且获得了大约94%的准确率。但该模型预测,大多数情况下是1s或1s。我检查了数据集,它包含了相当多的is实例,所以我认为数据集不是问题所在。此外,该模型还可以正确预测何时它是另一个单词(如this或christian)的一部分。这种行为的原因可能是什么?我如何改进模型以进行检测

我试过的东西

减少maxpool层的数量

对maxpool层使用2x1内核

Input: (?, 64, 1024, 1)
cnn-1: [None, 64, 1024, 64]
relu-1: [None, 64, 1024, 64]
bn-1: [None, 64, 1024, 64]
maxpool-1: [None, 32, 512, 64]
cnn-2: [None, 32, 512, 128]
relu-2: [None, 32, 512, 128]
bn-2: [None, 32, 512, 128]
maxpool-2: [None, 16, 256, 128]
cnn-3-1: [None, 16, 256, 256]
relu-3-1: [None, 16, 256, 256]
cnn-3-1: [None, 16, 256, 256]
relu-3: [None, 16, 256, 256]
bn-3: [None, 16, 256, 256]
maxpool-3: [None, 8, 128, 256]
cnn-4-1: [None, 8, 128, 512]
relu-4-1: [None, 8, 128, 512]
bn-4-1: [None, 8, 128, 512]
cnn-4-2: [None, 8, 128, 512]
relu-4-2: [None, 8, 128, 512]
bn-4-2: [None, 8, 128, 512]
maxpool-4: [None, 4, 64, 512]
cnn-5: [None, 4, 64, 512]
relu-5: [None, 4, 64, 512]
lstm-input: [None, 64, 2048]
lstm-output: [None, 64, 256]
lstm-output-reshaped: [None, 256]
fully-connected: [None, 94]
reshaped_logits: [None, None, 94]
transposed_logits: [None, None, 94]

由于数据集中的大多数数字前面可能都有空格,1和i看起来很相似,所以这是一个可以理解的错误

我不认为改变网络架构会有任何帮助

我要做的是人为地对is实例进行过采样。你说已经有很多这样的例子了,但可能还不够。因此,以5%-10%的概率强制文本样本位于包含is的位置。你甚至不需要重新开始整个训练,你可以像这样继续训练一个已经训练过的网络,这将迫使网络偏向is

如果它现在开始误认15,那么以较小的概率,比如2%-5%,添加包含类似数字的拉伸。因此,就像教一个人一样,向他展示例子,让他了解其中的差异


不过,不要把概率提高得太高,因为这样会破坏一般的准确性。它将很快学会从is中识别15,但会忘记其他一切…

您将需要一个语言模型来纠正ocr输出中的拼写。我想你可以在nltk中找到一个拼写检查器。使用seq2seq自动编码器可以构建更复杂的拼写检查器