Mục đích của tf.app.flags trong TensorFlow là gì?


115

Tôi đang đọc một số mã ví dụ trong Tensorflow, tôi tìm thấy mã sau

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.')

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

Nhưng tôi không thể tìm thấy bất kỳ tài liệu nào về cách sử dụng này tf.app.flags.

Và tôi thấy việc triển khai các cờ này là trong tensorflow/tensorflow/python/platform/default/_flags.py

Rõ ràng, điều này tf.app.flagsbằng cách nào đó được sử dụng để định cấu hình mạng, vậy tại sao nó không có trong tài liệu API? Bất cứ ai có thể giải thích những gì đang xảy ra ở đây?

Câu trả lời:


110

Các tf.app.flagsmô-đun là hiện nay một wrapper mỏng xung quanh python-gflags, vì vậy tài liệu cho dự án đó là nguồn lực tốt nhất cho làm thế nào để sử dụng nó argparse , mà thực hiện một tập hợp con của các chức năng trong python-gflags.

Lưu ý rằng mô-đun này hiện được đóng gói để tiện lợi cho việc viết ứng dụng demo và về mặt kỹ thuật không phải là một phần của API công khai, vì vậy nó có thể thay đổi trong tương lai.

Chúng tôi khuyên bạn nên triển khai phân tích cú pháp cờ của riêng mình bằng cách sử dụng argparsehoặc bất kỳ thư viện nào bạn thích.

EDIT: Các tf.app.flagsmô-đun không có trong thực tế triển khai sử dụng python-gflags, nhưng nó sử dụng một API tương tự.


80
"được đóng gói để thuận tiện cho việc viết các ứng dụng demo và về mặt kỹ thuật không phải là một phần của AP công cộng" ... kỳ lạ là nó được sử dụng trong hầu hết mọi hướng dẫn, nhưng không có tài liệu nào về nó. Dẫn đến nhiều nhầm lẫn.
bay cao tốc

2
Để có một ví dụ điển hình về cách sử dụng argparse để chuyển các đối số đến mô hình TensorFlow và cách gói nó vào một mô-đun Python cho đám mây, hãy xem task.py trong mô-đun taxifare , một phần của tài liệu khóa học đào tạo-data-analyst .
charlesreid1

3
tf.app.runcũng không nằm trong API công cộng? Bởi vì nó dựa vào tf.app.flagsvà nó có tài liệu công khai ( tensorflow.org/api_docs/python/tf/app/run ), vì vậy tôi cho rằng nó là công khai và được hỗ trợ. Nếu nó được khuyến nghị sử dụng argparsethay thế, bạn có thể cung cấp một ví dụ ngắn gọn về cách được đề xuất để sử dụng nó với argparse?
naktinis 20/02/18

6
tài liệu không phải là một vấn đề cho mọi thứ trong tensorflow.
mã chết

37

Các tf.app.flagsmô-đun là một chức năng được cung cấp bởi Tensorflow để thực hiện lá cờ dòng lệnh cho chương trình Tensorflow của bạn. Ví dụ: mã bạn xem qua sẽ thực hiện như sau:

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

Tham số đầu tiên xác định tên của cờ trong khi tham số thứ hai xác định giá trị mặc định trong trường hợp cờ không được chỉ định trong khi thực thi tệp.

Vì vậy, nếu bạn chạy như sau:

$ python fully_connected_feed.py --learning_rate 1.00

thì tốc độ học được đặt thành 1,00 và sẽ vẫn là 0,01 nếu cờ không được chỉ định.

Như đã đề cập trong bài viết này , tài liệu có thể không có vì đây có thể là thứ mà Google yêu cầu nội bộ để các nhà phát triển của mình sử dụng.

Ngoài ra, như đã đề cập trong bài đăng, có một số lợi thế khi sử dụng cờ Tensorflow trên chức năng cờ được cung cấp bởi các gói Python khác, chẳng hạn như argparseđặc biệt khi xử lý các mô hình Tensorflow, điều quan trọng nhất là bạn có thể cung cấp thông tin cụ thể về Tensorflow cho mã, chẳng hạn như thông tin về GPU nào sẽ sử dụng.


1
tham số thứ ba nói gì? có lẽ rằng nó giống như chuỗi doc nhỏ. Rất muốn biết nếu tôi sai.
shivam13juna

Vâng, đó có thể là nó. Tôi đã không thấy bất kỳ công dụng thực tế nào cho nó cho đến nay, vì vậy tôi cho rằng nó để bạn hiểu.
Vedang Waradpande 17/02/19

11

Tại Google, họ sử dụng hệ thống cờ để đặt giá trị mặc định cho các đối số. Nó tương tự như argparse. Họ sử dụng hệ thống cờ của riêng họ thay vì argparse hoặc sys.argv.

Nguồn: Tôi đã làm việc ở đó trước đây.


5

Khi sử dụng tf.app.run()bạn có thể chuyển biến rất tiện lợi giữa các luồng sử dụng tf.app.flags. Xem điều này để sử dụng thêm tf.app.flags.


4

Sau khi thử nhiều lần, tôi thấy điều này để in tất cả khóa FLAGS cũng như giá trị thực -

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

  print(key, FLAGS[key].value)

3
ý bạn là FLAGS [key]
Physincubus 11/09/18
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.