0

オンラインの手書き認識を認識するコードに取り組んでいます。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 に変更した後、特定のステップの後でコードが停止することです。最初のエポックの出力は表示されず、現在約 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)

4

1 に答える 1

0

単語ビーム検索について説明している論文を次に示します。おそらく、役に立つ情報が含まれています (この論文の著者は私です)。

私はあなたの仕事を2つの別々の部分として見ます:

  1. 光学モデル、つまり、「見る」だけでテキストを読むのに可能な限り優れたモデルをトレーニングします
  2. 言語モデル、つまり、十分に大きなテキスト コーパスを使用し、デコーダの十分に高速なモードを使用する

パート (1) に最適なモデルを選択するには、検証にベスト パス (貪欲) デコードを使用するだけで十分です。最適なパスに間違った文字が含まれている場合、(言語モデルを使用している場合でも) ビーム検索で回復する機会がない可能性が高くなります。

パート(2)に進みます。単語ビーム検索の実行時間について: すべてのモードの中で最も遅い「NGramsForecast」モードを使用しています。実行時間は O(W*log(W)) で、W は辞書内の単語数です。"NGrams" は O(log(W)) です。論文を調べて表 1 を見ると、予測モード (「NGramsForecast」または「NGramsForecastAndSample」) を使用するとランタイムが大幅に悪化することがわかりますが、文字エラー率は改善される場合と改善されない場合があります (「Words」など)。モードの実行時間は 90 ミリ秒ですが、「NGramsForecast」の IAM データセットの実行時間は 16 秒を超えています)。

実際の使用例として、次のことをお勧めします。

  • 辞書(つまり、固有の単語のリスト)がある場合は、「単語」モードを使用します
  • ターゲット言語で十分な文を含む大きなテキスト コーパスがある場合は、「NGrams」モードを使用します
  • 予測モードを使用せず、代わりに「Words」または「NGrams」モードを使用し、より良い文字エラー率が必要な場合はビーム幅を増やします
于 2019-12-21T20:20:57.307 に答える