python-3.x - CTC + BLSTM 架构在第一个 epoch 之前停止/挂起
问题描述
我正在研究识别在线手写识别的代码。它适用于 CTC 损失函数和 Word Beam Search(自定义实现:githubharald)
TF 版本:1.14.0
以下是使用的参数:
batch_size: 128
total_epoches: 300
hidden_unit_size: 128
num_layers: 2
input_dims: 10 (number of input Features)
num_classes: 80 (CTC output logits)
save_freq: 5
learning_rate: 0.001
decay_rate: 0.99
momentum: 0.9
max_length: 1940.0 (BLSTM with variable length time stamps)
label_pad: 63
我面临的问题是,在将解码器从 CTC Greedy Decoder 更改为 Word Beam Search 之后,我的代码在特定步骤后停止。它没有显示第一个 epoch 的输出,现在卡在那里大约 5-6 小时。
它被卡住的步骤:tensorflow/stream_executor/platform/default/dso_loader.cc:42] Successfully opened dynamic library libcublas.so.10
我正在使用 Nvidia DGX-2 进行训练(名称:Tesla V100-SXM3-32GB)
解决方案
这是描述词束搜索的论文,也许它包含一些对您有用的信息(我是论文的作者)。
我会将您的任务视为两个独立的部分:
- 光学模型,即仅通过“查看”文本来训练一个尽可能擅长阅读文本的模型
- 语言模型,即使用足够大的文本语料库,使用足够快的解码器模式
要为第 (1) 部分选择最佳模型,使用最佳路径(贪婪)解码进行验证就足够了。如果最佳路径包含错误字符,那么波束搜索也没有机会恢复的可能性很高(即使在使用语言模型时)。
现在到第 (2) 部分。关于词束搜索的运行时间:您正在使用“NGramsForecast”模式,这是所有模式中最慢的。它的运行时间为 O(W*log(W)),其中 W 是字典中的单词数。“Ngrams”有 O(log(W))。如果您查看论文并转到表 1,您会发现使用预测模式(“NGramsForecast”或“NGramsForecastAndSample”)时运行时间变得更糟,而字符错误率可能会或可能不会好转(例如“Words”模式的运行时间为 90 毫秒,而“NGramsForecast”对于 IAM 数据集的运行时间超过 16 秒)。
对于实际用例,我建议如下:
- 如果您有字典(即唯一单词列表),请使用“单词”模式
- 如果你有一个包含足够多目标语言句子的大型文本语料库,那么使用“NGrams”模式
- 如果您需要更好的字符错误率,请不要使用预测模式,而是使用“Words”或“NGrams”模式并增加光束宽度
推荐阅读
- python - Pip 已安装到 python3.6 但我在 Ubuntu 18.04 上使用带有 VS Code 的 python3.7
- c# - 从 c# 通用处理程序调用 vb 子例程
- push-notification - 无法通过重定向到另一个域来深度链接到 PWA
- android - 从火力基地检索坐标并将其绘制在地图上
- c# - 从类库中的公共 api 返回数据列表的最佳做法是什么?
- java - 如何将此水平 ViewPager 变压器修改为垂直变压器?
- html - 将静态 HTML 网站导入 Django CMS
- python-3.x - JupyterLab - 卡在“内核重新连接” - Python 3
- sql - Tableau 月销售额总和与 Las 帐户客户项目当月销售额
- azure - Azure 搜索:为 .vtt 运行索引器