2016-02-11 13 views
32

Obiekt wykresu w Tensorflow posiada metodę o nazwie "get_tensor_by_name (name)". Czy mimo to można uzyskać listę prawidłowych nazw tensorów?Lista nazw tensorów na wykresie w Tensorflow

Jeśli nie, to czy ktoś zna prawidłowe nazwy dla wstępnie wprowadzonego modelu inception-v3 from here? Z ich przykładu, pool_3, jest jeden prawidłowy tensor, ale lista wszystkich z nich byłaby miła. Spojrzałem na the paper referred to i niektóre z warstw wydają się odpowiadać rozmiarom w tabeli 1, ale nie wszystkie.

Odpowiedz

40

Papier nie odzwierciedla dokładnie modelu. Jeśli pobierzesz źródło z arxiv, ma on dokładny opis modelu jako model.txt, a jego nazwy silnie korelują z nazwami w wydanym modelu.

Aby odpowiedzieć na pierwsze pytanie, sess.graph.get_operations() podaje listę operacji. W przypadku op, op.name podaje nazwę, a op.values() podaje listę produkowanych przez nią tensorów (w modelu incepcji-v3 wszystkie nazwy tensorów są nazwą op z dodanym do niej ": 0", więc pool_3:0 jest generatorem tensora przez ostateczne łączenie op.)

+0

Dzięki za szybką odpowiedź! Wciąż wydaje się, że istnieją pewne różnice w pliku model.txt i pliku wyjściowym, który widzę w tym udoskonalonym modelu. Na przykład, jeśli przyjrzę się "pool: 0", który, jak sądzę, jest pierwszą warstwą łączącą, otrzymuję kształt 73x73x64, ale dane wejściowe do warstwy po nim w modelu.txt to 73x73x80. Czy coś nie rozumiem? –

+0

@john Nie zagłębiłem się głęboko w komentarze w pliku model.txt, myślę, że w komentarzach są pewne niespójności - nie znalazłem niespójności w komentarzach. Dla tej puli, poprzednia splot ma 64 banków filtrów (drugi argument dla Conv w przypisaniu do conv_2), więc warstwa łączenia ma również 64 kanały. 80 to liczba wyjść następnej warstwy konwergencji ... – etarion

+0

@etarion gdzie mogę pobrać ten model.txt? Czy możesz podać mi bezpośredni link? Z góry dzięki –

9

Aby zobaczyć operacje na wykresie (Zobaczysz wiele, więc w celu skrócenia podałem tutaj tylko pierwszy ciąg znaków).

sess = tf.Session() 
op = sess.graph.get_operations() 
[m.values() for m in op][1] 

out: 
(<tf.Tensor 'conv1/weights:0' shape=(4, 4, 3, 32) dtype=float32_ref>,) 
6

Nie trzeba tworzyć sesji, aby zobaczyć nazwy wszystkich nazw operacji na wykresie. Aby to zrobić, wystarczy pobrać domyślny wykres tf.get_default_graph() i wyodrębnić wszystkie operacje: .get_operations. Każda operacja ma many fields, potrzebna jest nazwa.

Oto kod:

import tensorflow as tf 
a = tf.Variable(5) 
b = tf.Variable(6) 
c = tf.Variable(7) 
d = (a + b) * c 

for i in tf.get_default_graph().get_operations(): 
    print i.name 
+0

Działa to, ale z jakiegoś powodu model początkowy (tylko model, na którym go wypróbowałem) ma "# 0" w większości swoich nazw i nie jest odsklepiony przez powyższy kod 'i.name'. Dlaczego? – Moondra

0

Jako zagnieżdżonego listowego:

tensor_names = [t.name for op in tf.get_default_graph().get_operations() for t in op.values()] 

funkcji, aby uzyskać nazwy tensorów w postaci wykresu (domyślne do domyślnych wykres):

def get_names(graph=tf.get_default_graph()): 
    return [t.name for op in graph.get_operations() for t in op.values()] 

Funkcja uzyskiwania tensorów na wykresie (domyślnie jest to wykres domyślny):

def get_tensors(graph=tf.get_default_graph()): 
    return [t for op in graph.get_operations() for t in op.values()] 
Powiązane problemy