programing

tf.app.run()은 어떻게 작동합니까?

powerit 2023. 5. 28. 21:06
반응형

tf.app.run()은 어떻게 작동합니까?

안녕하십니까?tf.app.run()Tensorflow 번역 데모에서 작업하시겠습니까?

tensorflow/models/rnn/translate/translate.py에 대한 요구가 있습니다tf.app.run()어떻게 처리되고 있습니까?

if __name__ == "__main__":
    tf.app.run() 
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))

한 줄씩 나누겠습니다.

flags_passthrough = f._parse_flags(args=args)

이렇게 하면 명령줄을 통해 전달하는 인수가 유효합니다. 예를 들어,python my_model.py --data_dir='...' --max_iteration=10000실제로 이 기능은 파이썬 표준을 기반으로 구현되었습니다.argparse모듈.

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

첫번째main의 오른쪽에=현재 함수의 첫 번째 인수입니다.run(main=None, argv=None).하는 동안에sys.modules['__main__']현재 실행 중인 파일을 의미합니다(예:my_model.py).

두 가지 경우가 있습니다.

  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)함수가 구문 분석된 인수로 올바르게 호출됩니다.

플래그 구문 분석을 처리한 다음 자신의 메인으로 디스패치하는 매우 빠른 래퍼일 뿐입니다.코드를 참조하십시오.

에 특별한 것은 없습니다.이것은 일반적인 진입점 스크립트일 뿐입니다.

옵션인 '주' 기능과 'argv' 목록으로 프로그램을 실행합니다.

그것은 신경망과는 아무런 관련이 없고, 단지 주요 기능을 호출하고, 그것에 대한 모든 주장을 전달합니다.

간단히 말해, 의 작업은 먼저 다음과 같이 나중에 사용할 수 있도록 글로벌 플래그를 설정하는 것입니다.

from tensorflow.python.platform import flags
f = flags.FLAGS

그런 다음 일련의 인수를 사용하여 사용자 지정 기본 기능을 실행합니다.

예를 들어 TensorFlow NMT 코드베이스의 경우, 훈련/추론을 위한 프로그램 실행의 첫 번째 진입점은 이 지점에서 시작됩니다(아래 코드 참조).

if __name__ == "__main__":
  nmt_parser = argparse.ArgumentParser()
  add_arguments(nmt_parser)
  FLAGS, unparsed = nmt_parser.parse_known_args()
  tf.app.run(main=main, argv=[sys.argv[0]] + unparsed)

다음을 사용하여 인수를 구문 분석한 후argparse,와 함께tf.app.run()다음과 같이 정의된 "메인" 함수를 실행합니다.

def main(unused_argv):
  default_hparams = create_hparams(FLAGS)
  train_fn = train.train
  inference_fn = inference.inference
  run_main(FLAGS, default_hparams, train_fn, inference_fn)

따라서 글로벌 사용을 위해 플래그를 설정한 후 다음을 실행합니다.main사용자가 전달argv매개 변수로 사용할 수 있습니다.

추신: Salvador Dali의 대답이 말해주듯이, TensorFlow가 최적화된 실행을 수행하는지는 확신할 수 없지만, 좋은 소프트웨어 엔지니어링 관행일 뿐입니다.main일반 CPython을 사용하여 실행된 것보다 더 많은 기능.

Google 코드는 라이브러리/바이너리/파이썬 스크립트에서 액세스하는 글로벌 플래그에 많이 의존하며, softf.app.run()은 플래그를 파싱하여 FLAGs(또는 유사한) 변수로 글로벌 상태를 만든 다음 python main()을 호출합니다.

tf.app.run()에 대한 이 호출이 없으면 사용자가 FLAG 구문 분석을 잊어버려 이러한 라이브러리/바이너리/스크립트가 필요한 FLAG에 액세스할 수 없게 될 수 있습니다.

2.0 호환되는 답변:사용할 경우tf.app.run()에서 명령을 사용해야 합니다.

tf.compat.v1.app.run()또는 사용할 수 있습니다.tf_upgrade_v2 변환하다1.x에 코드를 붙이다.2.0.

언급URL : https://stackoverflow.com/questions/33703624/how-does-tf-app-run-work

반응형