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
).
두 가지 경우가 있습니다.
당신은 없습니다.
main
에서 기능하는.my_model.py
그럼 전화하셔야 합니다.tf.app.run(my_main_running_function)
당신은 가지고 있습니다.
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
'programing' 카테고리의 다른 글
MongoDB 인스턴스에 대한 클라이언트가 유효한지 어떻게 확인합니까? (0) | 2023.05.28 |
---|---|
HEAD 커밋 ID를 표시하는 Git 명령? (0) | 2023.05.28 |
GET 요청 대신 OPTIONS 요청을 받는 이유는 무엇입니까? (0) | 2023.05.28 |
Xcode 8 콘솔 쓰레기? (0) | 2023.05.28 |
Nullable의 복싱/언복싱 동작은 어떻게 가능합니까? (0) | 2023.05.28 |