web-dev-qa-db-ja.com

InvalidArgumentError:現在のグラフとチェックポイントからのグラフの不一致

したがって、私は基本的にこのトランスフォーマーの実装をプロジェクトに使用しています https://github.com/Kyubyong/transformer 。元々作成されたドイツ語から英語への翻訳でうまく機能し、翻訳したい言語の語彙ファイルを作成するために、処理をpythonスクリプトに変更しました。これはうまく機能しているようです。 。

ただし、トレーニングに関しては、次のエラーが発生します。

InvalidArgumentError(トレースバックについては上記を参照):チェックポイントからの復元に失敗しました。これは、現在のグラフとチェックポイントからのグラフの不一致が原因である可能性が高いです。チェックポイントに基づいて予想されるグラフを変更していないことを確認してください。元のエラー:

割り当てには、一致する両方のテンソルの形状が必要です。 lhs shape = [9796,512] rhs shape = [9786,512] [[{{node save/Assign_412}} = Assign [T = DT_FLOAT、_class = ["loc:@ encoder/enc_embed/lookup_table"]、use_locking = true、validate_shape = true、_device = "/ job:localhost/replica:0/task:0/device:CPU:0"](encoder/enc_embed/lookup_table/Adam_1、save/RestoreV2:412)]]

今、私はなぜ上記のエラーが出るのか分かりません。また、元のコードに戻してドイツ語から英語に翻訳したところ、動作する前に、同じエラーが発生しました(もちろん、lhsとrhsのテンソルの形状は異なります)。

なぜこれが起こり得るのかについてのアイデアはありますか?

前もって感謝します

編集:これはここで問題となっている特定のファイルです、実行時のtrain.py: https://github.com/Kyubyong/transformer/blob/master/train.py 何も変更されていませんdeとenに読み込まれる語彙が異なるという事実以外は(実際には、単語として1文字の語彙ファイルです)。ただし、前述のように、前の作業例に戻った場合でも、lhsとrhsの次元が異なると同じエラーが発生します。

10
noob

私は同様のエラーを受け取りました、私の場合、以前の失敗したジョブの出力が出力ディレクトリに残っていたようで、新しいジョブのチェックポイントを保存/復元するときにいくつかの非互換性があったので、私はただそれをきれいにしました出力dirを起動すると、新しいジョブが正しく機能しました。

1
kevin

大きな数字は、ほぼ間違いなく語彙のサイズです。初期行列のサイズは[vocab_size、hidden_​​dim]です。したがって、語彙のサイズを変更することで、物事を壊しています。

おそらく解決策は、必要な語彙でトレーニングされたモデルだけを見ているように、すべてのチェックポイントを確実に一掃することです。

0
forefinger