TensorFlow에서 tf.app.flags의 목적은 무엇입니까?


115

Tensorflow에서 몇 가지 예제 코드를 읽고 있는데 다음 코드를 찾았습니다.

flags = tf.app.flags
FLAGS = flags.FLAGS
flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')
flags.DEFINE_integer('max_steps', 2000, 'Number of steps to run trainer.')
flags.DEFINE_integer('hidden1', 128, 'Number of units in hidden layer 1.')
flags.DEFINE_integer('hidden2', 32, 'Number of units in hidden layer 2.')
flags.DEFINE_integer('batch_size', 100, 'Batch size.  '
                 'Must divide evenly into the dataset sizes.')
flags.DEFINE_string('train_dir', 'data', 'Directory to put the training data.')
flags.DEFINE_boolean('fake_data', False, 'If true, uses fake data '
                 'for unit testing.')

tensorflow/tensorflow/g3doc/tutorials/mnist/fully_connected_feed.py

하지만이 사용법에 대한 문서를 찾을 수 없습니다. tf.app.flags .

그리고이 플래그의 구현이 tensorflow/tensorflow/python/platform/default/_flags.py

분명히 이것은 tf.app.flags어떻게 든 네트워크를 구성하는 데 사용되는데 API 문서에없는 이유는 무엇입니까? 아무도 여기서 무슨 일이 일어나고 있는지 설명 할 수 있습니까?

답변:


110

tf.app.flags모듈은 현재 python-gflags를 둘러싼 얇은 래퍼 이므로 해당 프로젝트문서는 .NET Frameworkargparse 의 기능 중 일부를 구현하는 사용 방법에 대한 최고의 리소스입니다python-gflags .

이 모듈은 현재 데모 앱 작성의 편의를 위해 패키징되어 있으며 기술적으로 공개 API의 일부가 아니므로 향후 변경 될 수 있습니다.

argparse또는 선호하는 라이브러리를 사용하여 자체 플래그 구문 분석을 구현하는 것이 좋습니다 .

편집 :tf.app.flags 모듈을 사용하여 구현 사실에없는 python-gflags,하지만 비슷한 API를 사용합니다.


80
"데모 앱 작성을위한 편의를 위해 패키지화되어 있으며 기술적으로 공개 AP의 일부가 아닙니다."... 거의 모든 튜토리얼에서 사용되는 것이 이상하지만 이에 대한 문서는 없습니다. 많은 혼란을 초래합니다.
speedplane

2
TensorFlow 모델에 인수를 전달하는 클라우드를위한 파이썬 모듈로를 묶어하는 방법을 argparse 사용하는 방법의 좋은 예를 들어, 참조 task.pytaxifare의 상기의, 일부 모듈 훈련 - 데이터 분석 교재 .
charlesreid1 2017-10-26

3
tf.app.run공개 API의 일부도? 에 의존 tf.app.flags하고 공개 문서 ( tensorflow.org/api_docs/python/tf/app/run )가 있으므로 공개되고 지원된다고 가정합니다. argparse대신 사용을 권장하는 경우 권장되는 사용 방법에 대한 간단한 예를 argparse?
naktinis

6
문서화는 tensorflow의 모든 것에 대한 문제가 아닙니다.
deadcode

37

tf.app.flags모듈은 Tensorflow 프로그램에 대한 명령 줄 플래그를 구현하는 Tensorflow에서 제공하는 기능이다. 예를 들어, 본 코드는 다음을 수행합니다.

flags.DEFINE_float('learning_rate', 0.01, 'Initial learning rate.')

첫 번째 매개 변수는 플래그 이름을 정의하고 두 번째 매개 변수는 파일 실행 중에 플래그가 지정되지 않은 경우 기본값을 정의합니다.

따라서 다음을 실행하면 :

$ python fully_connected_feed.py --learning_rate 1.00

학습률은 1.00으로 설정되고 플래그가 지정되지 않은 경우 0.01로 유지됩니다.

이 기사에서 언급했듯이 Google에서 개발자가 사용하기 위해 내부적으로 요구하는 것일 수 있으므로 문서가 없을 수 있습니다.

또한 게시물에서 언급했듯이 argparse특히 Tensorflow 모델을 다룰 때 와 같이 다른 Python 패키지에서 제공하는 플래그 기능에 비해 Tensorflow 플래그를 사용하면 몇 가지 이점이 있습니다 . 가장 중요한 것은 Tensorflow 관련 정보를 코드에 제공 할 수 있다는 것입니다. 사용할 GPU에 대해.


1
세 번째 매개 변수는 무엇을 말합니까? 아마도 작은 문서 문자열과 같을 것입니다. 내가 틀렸는 지 알고 싶습니다.
shivam13juna

예, 아마도 그럴 것입니다. 지금까지 실제적인 사용을 본 적이 없으므로 이해를 돕기위한 것 같습니다.
Vedang Waradpande

11

Google에서는 플래그 시스템을 사용하여 인수의 기본값을 설정합니다. argparse와 비슷합니다. argparse 또는 sys.argv 대신 자체 플래그 시스템을 사용합니다.

출처 : 전에 거기에서 일했습니다.


5

을 사용하면을 사용 tf.app.run()하여 스레드간에 매우 편리하게 변수를 전송할 수 있습니다 tf.app.flags. 의 추가 사용은 이것을 참조하십시오 tf.app.flags.


4

여러 번 시도한 후 모든 FLAGS 키와 실제 값을 인쇄하는 것을 발견했습니다.

for key in tf.app.flags.FLAGS.flag_values_dict():

  print(key, FLAGS[key].value)

3
당신의 평균 FLAGS [키]
physincubus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.