PaddlePaddleは、データを反復処理するときにエラーが発生します:TypeError: 'function'オブジェクトは反復可能ではありません



Paddlepaddle Has An Error When Iterating Over Data



  • readerData reading

  • 問題の説明:リーダーを使用してトレーニングデータを読み取ると、エラーが発生し、エラータイプTypeError:「function」オブジェクトは反復できません。



  • エラーメッセージ:

TypeError Traceback (most recent call last) in 2 for pass_id in range(1): 3 # training ----> 4 for batch_id, data in enumerate(train_reader): 5 train_cost, train_acc = exe.run(program=fluid.default_main_program(), 6 feed=feeder.feed(data), TypeError: 'function' object is not iterable
  • 問題の再発:ループでデータを読み取る場合、pass paddle.batch()定義されたリーダーがデータを反復処理しますenumerate()使用される変数が定義されます。関数が呼び出されると、エラーが報告され、エラーコードは次のようになります。
for batch_id, data in enumerate(train_reader): train_cost, train_acc = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost, acc])
  • 問題解決:同じpaddle.batch()データを読み取る関数を取得します。戻り値はリーダーです。上記のエラーは、直接train_reader変数であるため、この変数は関数を参照しているため、括弧を追加する必要があります。この関数リーダーの戻り値を取得します。
for batch_id, data in enumerate(train_reader()): train_cost, train_acc = exe.run(program=fluid.default_main_program(), feed=feeder.feed(data), fetch_list=[avg_cost, acc])

Python変数では、括弧が使用されていない場合、関数自体が呼び出されます。これは関数オブジェクトであり、関数が完了するのを待つ必要はありません。括弧を使用する場合は、関数の実行結果が呼び出され、関数の実行完了の結果が必要になります。