2015-12-12 29 views
15

Interfejs API omawia Graph Collections, które według code służą do przechowywania klucza/danych ogólnego przeznaczenia. Jaki jest cel tych kolekcji?Jaki jest cel kolekcji wykresów w TensorFlow?

+2

Wyszukaj "GraphKeys." w przypadku niektórych przykładów kolekcji: np. 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, Streszczenia: https://tensorflow.googlesource.com/tensorflow/+/master/tensorflow/python/ops/summary_ops.py#48 –

+0

Witaj @YaroslavBulatov możesz ponownie opublikować swój link? Ostatnie dwie są zepsute. Dziękuję zawsze! – Aaron

Odpowiedz

13

Należy pamiętać, że pod maską Tensorflow jest systemem do określania, a następnie wykonywania wykresów przepływu danych obliczeniowych. Kolekcje wykresów są używane jako część śledzenia tworzonych wykresów i sposobu ich wykonywania. Na przykład podczas tworzenia określonych rodzajów operacji, takich jak tf.train.batch_join, kod dodający operację spowoduje również dodanie niektórych kolejek do kolekcji wykresów QUEUE_RUNNERS. Później, gdy zadzwonisz pod numer start_queue_runners(), domyślnie przyjrzysz się kolekcji QUEUE_RUNNERS, aby wiedzieć, którzy biegacze mają wystartować.

+4

Ciągle mam wątpliwości co do koncepcji kolekcji. Dodanie różnych operacji do różnych kolekcji sprawia, że ​​wyszukiwanie op jest bardziej wydajne? Wygląda na to, że kolekcja nadaje się tylko do grupowania lub organizowania operacji opowiastkowych bez przynoszenia "prawdziwych" korzyści z obliczeń, prawda? Tutaj dla "prawdziwego" mam na myśli to, że jeśli usunę koncepcję zbierania z systemu tensorflow, nie zaszkodzi to obliczeniom. – ZijunLost

+0

Nie, celem zbiorów nie jest efektywność, chodzi o prowadzenie ksiąg rachunkowych. Kolekcje są używane, aby wiedzieć, które zmienne powinny zostać przeszkolone. Lub do których zadań należy wezwać na szkolenie. Kolekcje to mapa od napisu do zbioru-wykresu-bitów. Kilka znanych ciągów jest przechowywanych w GraphKeys. Odnoszą się one do ważnych zestawów bitów graficznych (tj. Op, zmiennych itp.). – BlessedKey

2

Myślę, że istnieją co najmniej dwie korzyści dla mnie do tej pory:

  1. kiedy dystrybuować swój program na wielu GPU lub maszyn jest to wygodne, aby zebrać straty z różnych urządzeń, które są w tej samej kolekcji. Użyj tf.add_n, aby dodać je, aby zgromadzić stratę.
  2. Aby zaktualizować określony zestaw zmiennych, takich jak wagi i błędy na swój własny sposób.

Na przykład:

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) 

Wydajność:

[Tablica ([0,2, 0,40000001, 0,60000002] dtype = float32) tablica ([2,20000005, 4,4000001, 6,4000001] dtype = float32)]

+0

Mała uwaga na kodzie ... kiedy uruchamiasz tf.InteractiveSession(), dlaczego nie czerpiesz z tego korzyści? Tak jak w ... użyj weight_init_op.run() i weight_update_ops.eval() – zwep

+0

@zwep Tak, masz rację. Może nie znam tej sztuczki, kiedy to pisałem; W każdym razie mój kod działa. – lerner