2017-02-23 42 views
7

Próbuję użyć tensorboard do oglądania uczenia się splotowej sieci neuronowej. Dobrze sobie radzę z funkcją tf.summary.merge_all, aby utworzyć scalone podsumowanie. Chciałbym jednak śledzić dokładność i stratę zarówno dla danych treningowych, jak i testowych. Ten wpis jest przydatny: Logging training and validation loss in tensorboard.Nie można użyć summary.merge w tensorboard do oddzielnego podsumowania szkolenia i oceny

Aby ułatwić sobie obsługę, chciałbym połączyć moje streszczenia w dwa połączone streszczenia, jeden do szkolenia i jeden do sprawdzenia poprawności. (Dodam jeszcze więcej rzeczy, takich jak obrazy itp.) Próbowałem podążać za opis z tensorboardu tf.summary.merge. Nie mogę sprawić, żeby to działało i nie jestem w stanie znaleźć żadnych działających przykładów, które pomogłyby mi zrozumieć, gdzie idę źle.

with tf.name_scope('accuracy'): 
    correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1)) 
    accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) 
    tf.summary.scalar('accuracy', accuracy) 
    tf.summary.scalar('train_accuracy', accuracy) 

with tf.name_scope('Cost'): 
    cross_entropy = tf.reduce_mean(
     tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y)) 
    opt = tf.train.AdamOptimizer() 
    optimizer = opt.minimize(cross_entropy) 
    grads = opt.compute_gradients(cross_entropy, [b_fc_loc2]) 
    tf.summary.scalar('cost', cross_entropy) 
    tf.summary.scalar('train_cost', cross_entropy) 


with tf.Session() as sess: 
    writer = tf.summary.FileWriter('./logs/mnistlogs/1f', sess.graph) 
    sess.run(tf.global_variables_initializer()) 
    merged = tf.summary.merge([cost, accuracy]) 

Wynika to z następującego błędu:

InvalidArgumentError (see above for traceback): Could not parse one of the summary inputs [[Node: Merge/MergeSummary = MergeSummary[N=2, _device="/job:localhost/replica:0/task:0/cpu:0"](Merge/MergeSummary/inputs_0, Merge/MergeSummary/inputs_1)]]

Chciałbym wiedzieć, dlaczego to nie działa i jak mogę znaleźć rozwiązanie, wszelkie przykłady pracy są doceniane.

Odpowiedz

11

Wymyśliłem to. Przed połączeniem muszę podać nazwy podsumowań. Poniższy kod rozwiązuje problem:

with tf.name_scope('Cost'): 
cross_entropy = tf.reduce_mean(
     tf.nn.softmax_cross_entropy_with_logits(logits=y_logits, labels=y)) 
opt = tf.train.AdamOptimizer(learning_rate=0.000003) 
optimizer = opt.minimize(cross_entropy) 
grads = opt.compute_gradients(cross_entropy, [b_fc_loc2]) 
cost_sum = tf.summary.scalar('val_cost', cross_entropy) 
training_cost_sum = tf.summary.scalar('train_cost', cross_entropy) 


with tf.name_scope('accuracy'): 
correct_prediction = tf.equal(tf.argmax(y_logits, 1), tf.argmax(y, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, 'float')) 
train_accuracy = accuracy 
accuracy_sum = tf.summary.scalar('val_accuracy', accuracy) 
training_accuracy_sum = tf.summary.scalar('train_accuracy', accuracy) 


with tf.Session() as sess: 
writer = tf.summary.FileWriter('./logs/{}/{}'.format(session_name, run_num), sess.graph) 
sess.run(tf.global_variables_initializer()) 
train_merged = tf.summary.merge([training_accuracy_sum, training_cost_sum]) 
+1

to: https://stackoverflow.com/questions/40722413/how-to-use-several-summary-collections-in-tensorflow to również dobre podejście, jeśli ciebie chcesz wykreślić dwie charakterystyczne grupy podsumowań. – Maikefer