tf.app.run() はどのように機能しますか? 質問する

tf.app.run() はどのように機能しますか? 質問する

tf.app.run()Tensorflow 翻訳デモはどのように機能しますか?

ではtensorflow/models/rnn/translate/translate.py、 への呼び出しがありますtf.app.run()。これはどのように処理されていますか?

if __name__ == "__main__":
    tf.app.run() 

ベストアンサー1

if __name__ == "__main__":

現在のファイルはモジュールとしてインポートされるのではなく、シェルの下で実行されることを意味します。

tf.app.run()

ファイルからわかるようにapp.py

def run(main=None, argv=None):
  """Runs the program with an optional 'main' function and 'argv' list."""
  f = flags.FLAGS

  # Extract the args from the optional `argv` list.
  args = argv[1:] if argv else None

  # Parse the known flags from that list, or from the command
  # line otherwise.
  # pylint: disable=protected-access
  flags_passthrough = f._parse_flags(args=args)
  # pylint: enable=protected-access

  main = main or sys.modules['__main__'].main

  # Call the main function, passing through any arguments
  # to the final program.
  sys.exit(main(sys.argv[:1] + flags_passthrough))

1行ずつ分解してみましょう:

flags_passthrough = f._parse_flags(args=args)

これにより、コマンドラインで渡す引数が有効であることが保証されます。python my_model.py --data_dir='...' --max_iteration=10000実際、この機能は Python 標準argparseモジュールに基づいて実装されています。

main = main or sys.modules['__main__'].main

mainの右側の最初の部分は=、現在の関数の最初の引数ですrun(main=None, argv=None)。一方、はsys.modules['__main__']現在実行中のファイル (例my_model.py) を意味します。

つまり、2 つのケースが考えられます。

  1. main関数がないmy_model.py場合は、呼び出す必要がありますtf.app.run(my_main_running_function)

  2. mainに関数がありますmy_model.py。(ほとんどの場合はそうなります。)

最後の行:

sys.exit(main(sys.argv[:1] + flags_passthrough))

main(argv)またはmy_main_running_function(argv)関数が解析された引数で適切に呼び出されることを保証します。

おすすめ記事