2015-12-12 12 views
15

API thảo luận về Graph Collections đánh giá từ code là khóa/lưu trữ dữ liệu chung nhằm mục đích chung. Mục đích của những bộ sưu tập đó là gì?Mục đích của các bộ sưu tập đồ thị trong TensorFlow là gì?

+2

Tìm kiếm "GraphKeys". cho một số ví dụ về các bộ sưu tập: ví dụ: TrainableVariables: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/ops/variables.py#L113, TableInitializers: https://tensorflow.googlesource.com/tensorflow /+/0.5.0/tensorflow/python/ops/data_flow_ops.py#521, Tóm tắt: https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/python/ops/summary_ops.py#48 –

+0

Xin chào @YaroslavBulatov bạn có thể vui lòng đăng lại liên kết của bạn không? Hai người cuối cùng bị hỏng. Cảm ơn mọi người! – Aaron

Trả lời

13

Hãy nhớ rằng dưới mui xe, Tensorflow là một hệ thống để xác định và sau đó thực hiện biểu đồ lưu lượng dữ liệu tính toán. Các bộ sưu tập đồ thị được sử dụng như một phần của việc theo dõi các đồ thị được xây dựng và cách chúng được thực thi. Ví dụ: khi bạn tạo một số loại ops nhất định, chẳng hạn như tf.train.batch_join, mã thêm op cũng sẽ thêm một số trình xử lý hàng đợi vào bộ sưu tập đồ thị QUEUE_RUNNERS. Sau đó, khi bạn gọi start_queue_runners(), theo mặc định, nó sẽ xem bộ sưu tập QUEUE_RUNNERS để biết người chạy nào sẽ bắt đầu.

+4

Tôi vẫn còn bối rối về khái niệm về bộ sưu tập. Bằng cách thêm các op khác nhau vào các bộ sưu tập khác nhau, nó có làm cho việc tìm kiếm op trở nên hiệu quả hơn không? Dường như bộ sưu tập chỉ tốt cho việc nhóm hoặc tổ chức các hoạt động nghiệp dư với nhau mà không mang lại bất kỳ lợi ích "thực" nào cho tính toán, đúng không? Ở đây cho "thực" tôi có nghĩa là nếu tôi loại bỏ các khái niệm về bộ sưu tập ra khỏi hệ thống tensorflow, nó không làm tổn thương tính toán. – ZijunLost

+0

Không, điểm của các bộ sưu tập không hiệu quả, vấn đề là giữ sách. Bộ sưu tập được sử dụng để biết các biến nào cần được đào tạo. Hoặc ops nào phải được gọi để huấn luyện. Bộ sưu tập là một bản đồ từ chuỗi đến bộ-of-graph-bit. Một số chuỗi đã biết được lưu trữ trong GraphKeys. Đây là những bộ đồ thị quan trọng (ví dụ: ops, biến, v.v.) – BlessedKey

2

Tôi nghĩ rằng có ít nhất hai lợi ích đối với tôi cho đến nay:

  1. khi bạn phân phối chương trình của bạn trên nhiều GPU hoặc máy nó là thuận tiện để thu thập thiệt hại từ các thiết bị khác nhau mà là trong bộ sưu tập tương tự. Sử dụng tf.add_n để thêm chúng để tích lũy mất mát.
  2. Để cập nhật một tập hợp các biến cụ thể như trọng số và thành kiến ​​theo cách của riêng tôi.

Ví dụ:

import tensorflow as tf  
w = tf.Variable([1,2,3], collections=[tf.GraphKeys.WEIGHTS], dtype=tf.float32)  
w2 = tf.Variable([11,22,32], collections=[tf.GraphKeys.WEIGHTS], dtype=tf.float32) 
weight_init_op = tf.variables_initializer(tf.get_collection_ref(tf.GraphKeys.WEIGHTS)) 
sess = tf.InteractiveSession() 
sess.run(weight_init_op) 
for vari in tf.get_collection_ref(tf.GraphKeys.WEIGHTS): 
    tf.add_to_collection(tf.GraphKeys.UPDATE_OPS, vari.assign(0.2 * vari)) 
weight_update_ops = tf.get_collection_ref(tf.GraphKeys.UPDATE_OPS) 
sess.run(weight_update_ops) 

Sản lượng:

[array ([0,2, 0,40000001, 0,60000002], dtype = float32), mảng ([2,20000005, 4,4000001, 6,4000001], dtype = float32)]

+0

Ghi chú nhỏ trên mã của bạn ... khi bạn bắt đầu một tf.InteractiveSession(), tại sao bạn không được hưởng lợi từ điều đó? Như trong ... sử dụng weight_init_op.run() và weight_update_ops.eval() – zwep

+0

@zwep Vâng, bạn nói đúng. Có lẽ tôi không biết điều đó khi tôi viết bài này .; Dù sao mã của tôi hoạt động. – lerner

Các vấn đề liên quan