Chcę narysować ciężary tf.layers.dense w histogramie tensorboardu, ale nie pokazuje się w parametrze, jak mogłem to zrobić?Jak uzyskać wagi w pliku tf.layers.dense?
Odpowiedz
Ciężary są dodawane jako zmiennej o nazwie kernel
, więc można użyć
x = tf.dense(...)
weights = tf.get_default_graph().get_tensor_by_name(
os.path.split(x.name)[0] + '/kernel:0'))
można oczywiście zastąpić tf.get_default_graph()
przez inny wykres, na którym pracujemy w.
Świetnie! Rozwiązuje moje pytanie. DZIĘKI – user8381550
I aby uzyskać uprzedzenia wystarczy użyć 'bias = tf.get_default_graph(). get_tensor_by_name ( os.path.split (x.name) [0] + '/ bias: 0') ' – collector
Wygląda na to, że powinno być oznaczone jako rozwiązane. –
Najnowszy warstwy tensorflow api tworzy wszystko zmienne za pomocą wywołania tf.get_variable
. Zapewnia to, że jeśli chcesz ponownie użyć zmiennej, możesz po prostu użyć funkcji tf.get_variable
i podać nazwę zmiennej, którą chcesz uzyskać.
W przypadku tf.layers.dense
zmienna jest tworzona jako: layer_name/kernel
. Tak, można uzyskać zmienną mówiąc:
weights = tf.get_variable("layer_name/kernel") # do not specify
# the shape here or it will confuse tensorflow into creating a new one.
[Edit]: Nowa wersja Tensorflow ma teraz zarówno funkcjonalne i obiektowego interfejsy API warstw. Jeśli potrzebujesz warstw tylko do celów obliczeniowych, to używanie funkcjonalnego API to dobry wybór. Nazwy funkcji zaczynają się od małych liter, na przykład ->tf.layers.dense(...)
. Obiekty warstwy można utworzyć za pomocą pierwszej wielkiej litery, np. ->tf.layers.Dense(...)
. Po uzyskaniu dojścia do tego obiektu warstwy można korzystać ze wszystkich jego funkcji. Aby uzyskać wagi, po prostu użyj obj.trainable_weights
, która zwraca listę wszystkich możliwych do wyszukania zmiennych znajdujących się w zasięgu tej warstwy.
Natknąłem się na ten problem i po prostu go rozwiązałem. Nazwa tf.layers.dense
nie musi być taka sama z prefiksem nazwy jądra. Mój tensor to "gęste_2/xxx", ale jego jądro to "gęsty_1/jądro: 0". Aby upewnić się, że działa tf.get_variable
, lepiej ustawić funkcję name=xxx
w funkcji tf.layers.dense
, aby dwie nazwy miały ten sam prefiks. Działa jako demonstracja poniżej:
l=tf.layers.dense(input_tf_xxx,300,name='ip1')
with tf.variable_scope('ip1', reuse=True):
w = tf.get_variable('kernel')
Przy okazji, moja wersja tf to 1.3.
Szaleję z tensorflow.
biegnę to:
sess.run(x.kernel)
po treningu, a ja się ciężary.
Pochodzi z właściwości opisanych: here.
Mówię, że zwariowałem, ponieważ wydaje się, że istnieje milion nieco różnych sposobów zrobienia czegoś w tf, a to odciąga samouczki.
Witamy w Stackoverflow! Poświęć trochę czasu na przeczytanie [stron pomocy] (http://stackoverflow.com/help), szczególnie w sekcjach o nazwie ["Jakie tematy mogę tu zadać?"] (Http://stackoverflow.com/help/ na temat) i ["Jakiego rodzaju pytań należy unikać?"] (http://stackoverflow.com/help/dont-ask). Proszę również wziąć udział w [trasie] (http://stackoverflow.com/tour) i przeczytać o [jak zadawać dobre pytania] (http://stackoverflow.com/help/how-to-ask). Na koniec, dowiedz się, jak utworzyć [Minimalny, kompletny i sprawdzalny przykład] (http://stackoverflow.com/help/mcve). – Markus