PaddlePaddleは、データを反復処理するときにエラーが発生します:TypeError: 'function'オブジェクトは反復可能ではありません
Paddlepaddle Has An Error When Iterating Over Data
-
reader
、Data 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変数では、括弧が使用されていない場合、関数自体が呼び出されます。これは関数オブジェクトであり、関数が完了するのを待つ必要はありません。括弧を使用する場合は、関数の実行結果が呼び出され、関数の実行完了の結果が必要になります。