PaddlePaddleテストデータセットのテスト中にエラー:Cannot find fetch variable in scope
4367 ワード
/usr/local/lib/python3.5/dist-packages/paddle/fluid/executor.py in run(self, program, feed, fetch_list, feed_var_name, fetch_var_name, scope, return_numpy, use_program_cache)
468
469 self._feed_data(program, feed, feed_var_name, scope)
--> 470 self.executor.run(program.desc, scope, 0, True, True)
471 outs = self._fetch_data(fetch_list, fetch_var_name, scope)
472 if return_numpy:
EnforceNotMet: Cannot find fetch variable in scope, fetch_var_name is mean_0.tmp_0 at [/paddle/paddle/fluid/operators/fetch_op.cc:37]
PaddlePaddle Call Stacks:
default_main_program()
からテストプログラムをクローンし、このテストプログラムを使用して、アクチュエータを介してテストプログラムを実行するとエラーが発生します.エラーコードは次のとおりです:test_program = fluid.default_main_program().clone(for_test=True)
cost = fluid.layers.cross_entropy(input=model, label=label)
avg_cost = fluid.layers.mean(cost)
acc = fluid.layers.accuracy(input=model, label=label)
default_main_program()
に追加されますが、テストはトレーニング時に使用されるいくつかの操作を使用する必要はありません.そのため、テストプログラムをクローンする際には、損失関数の後、最適化方法の前に定義する必要があります.正しいコードは次のとおりです:cost = fluid.layers.cross_entropy(input=model, label=label)
avg_cost = fluid.layers.mean(cost)
acc = fluid.layers.accuracy(input=model, label=label)
test_program = fluid.default_main_program().clone(for_test=True)
Program
はFluidプログラムの主要な構成部分の一つであり、Fluidプログラムには通常2つのProgram
が存在する.fluid.default_startup_program
は、モデルパラメータの作成、入出力、およびモデル内の学習可能なパラメータの初期化などの様々な動作を定義する.一方、fluid.default_main_program
は、ニューラルネットワークモデル、順方向逆計算、および最適化アルゴリズムによるネットワーク内の学習可能なパラメータの更新を定義する.