2016-09-12 12 views
5

W mojej sieci neuronowej, tworzę jakieś tf.Variable obiektów następująco:zapisać konkretne wagi w TensorFlow

weights = { 
    'wc1_0': tf.Variable(tf.random_normal([5, 5, 3, 64])), 
    'wc1_1': tf.Variable(tf.random_normal([5, 5, 3, 64])) 
} 
biases = { 
    'bc1_0': tf.Variable(tf.constant(0.0, shape=[64])), 
    'bc1_1': tf.Variable(tf.constant(0.0, shape=[64])) 
} 

Jak bym zapisać zmienne weights i biases po określonej liczbie iteracji bez zapisywania innych zmiennych?

+0

Istnieje wiele różnych sposobów robienia tego. Możesz użyć wygaszacza tensorflow lub użyć swojego ulubionego formatu, np. H5 lub npy. – jean

+0

dzięki, mam to. – luohao

Odpowiedz

5

Standardowym sposobem zapisywania zmiennych w TensorFlow jest użycie obiektu tf.train.Saver. Domyślnie zapisuje wszystkie zmienne w swoim problemie (czyli wyniki tf.all_variables()), ale można zapisać zmienne selektywnie przepuszczając var_list opcjonalny argument do konstruktora tf.train.Saver:

weights = { 
    'wc1_0': tf.Variable(tf.random_normal([5, 5, 3, 64])), 
    'wc1_1': tf.Variable(tf.random_normal([5, 5, 3, 64])) 
} 
biases = { 
    'bc1_0': tf.Variable(tf.constant(0.0, shape=[64])), 
    'bc1_1': tf.Variable(tf.constant(0.0, shape=[64])) 
} 

# Define savers for explicit subsets of the variables. 
weights_saver = tf.train.Saver(var_list=weights) 
biases_saver = tf.train.Saver(var_list=biases) 

# ... 
# You need a TensorFlow Session to save variables. 
sess = tf.Session() 
# ... 

# ...then call the following methods as appropriate: 
weights_saver.save(sess) # Save the current value of the weights. 
biases_saver.save(sess) # Save the current value of the biases. 

pamiętać, że jeśli przekazać słownika do konstruktora tf.train.Saver (takie jak weights i/lub biases słowników z pytaniem), TensorFlow będzie użyć klawisza słownika (np 'wc1_0') jako nazwę dla odpowiedniej zmiennej w dowolnym punkcie kontrolnym pliki, tworzy lub zużywa .

Domyślnie, lub jeśli przekażesz listę obiektów tf.Variable do konstruktora, TensorFlow użyje zamiast tego właściwości tf.Variable.name.

Przekazywanie słownika umożliwia dzielenie punktów kontrolnych między modelami, które dają różne właściwości Variable.name dla każdej zmiennej. Ten szczegół jest ważny tylko wtedy, gdy chcesz użyć utworzonych punktów kontrolnych z innym modelem.

Powiązane problemy