tf.app.flags ใน TensorFlow มีจุดประสงค์อะไร


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 ดังนั้นเอกสารสำหรับโครงการนั้นจึงเป็นแหล่งข้อมูลที่ดีที่สุดสำหรับวิธีการใช้งาน argparseซึ่งจะใช้ส่วนย่อยของฟังก์ชันในpython-gflags .

โปรดทราบว่าโมดูลนี้อยู่ในแพ็กเกจเพื่อความสะดวกในการเขียนแอปสาธิตและไม่ได้เป็นส่วนหนึ่งของ API สาธารณะในทางเทคนิคดังนั้นจึงอาจมีการเปลี่ยนแปลงในอนาคต

เราขอแนะนำให้คุณใช้การแยกวิเคราะห์แฟล็กของคุณเองโดยใช้argparseหรือไลบรารีใดก็ได้ที่คุณต้องการ

แก้ไข:tf.app.flagsโมดูลไม่ได้อยู่ในความเป็นจริงดำเนินการโดยใช้python-gflagsแต่จะใช้ API ที่คล้ายกัน


80
"บรรจุไว้เพื่อความสะดวกในการเขียนแอปสาธิตและไม่ได้เป็นส่วนหนึ่งของ AP สาธารณะในทางเทคนิค" ... เป็นเรื่องแปลกที่ใช้ในการสอนเกือบทุกเรื่อง แต่ไม่มีเอกสารประกอบเลย นำไปสู่ความสับสนมากมาย
เครื่องบินเร็ว

2
สำหรับตัวอย่างที่ดีในการใช้อาร์กิวเมนต์เพื่อส่งผ่านอาร์กิวเมนต์ไปยังโมเดล TensorFlow และวิธีรวมเข้ากับโมดูล Python สำหรับระบบคลาวด์โปรดดูtask.pyในโมดูลtaxifareซึ่งเป็นส่วนหนึ่งของเอกสารประกอบหลักสูตรการฝึกอบรมนักวิเคราะห์ข้อมูล .
charlesreid1

3
คือtf.app.runยังไม่ได้เป็นส่วนหนึ่งของ API สาธารณะ? เนื่องจากต้องใช้tf.app.flagsและมีเอกสารสาธารณะ ( tensorflow.org/api_docs/python/tf/app/run ) ดังนั้นฉันจึงถือว่าเป็นสาธารณะและได้รับการสนับสนุน หากมีการแนะนำให้ใช้argparseแทนคุณสามารถให้ตัวอย่างสั้น ๆ เกี่ยวกับวิธีการใช้งานที่แนะนำได้argparseหรือไม่?
naktinis

6
ไม่ใช่เอกสารที่เป็นปัญหาสำหรับทุกสิ่งในเทนเซอร์โฟลว์
รหัสตาย

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 ต้องการภายในเพื่อให้นักพัฒนาใช้

ตามที่กล่าวไว้ในโพสต์มีข้อดีหลายประการของการใช้แฟล็ก Tensorflow เหนือฟังก์ชันแฟล็กที่จัดเตรียมโดยแพ็คเกจ Python อื่น ๆ เช่นargparseโดยเฉพาะอย่างยิ่งเมื่อจัดการกับโมเดล 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.