2016-07-05 12 views
1

Как добавить подтверждение в тензограмму? Я написал обертки для слоев, как:Добавить резюме проверки

def convolution(input_data, kernel_shape, strides, activation, name=None): 
    with tf.name_scope(name): 
     kernel = tf.Variable(tf.truncated_normal(kernel_shape, stddev=stddev), name="weights") 
     bias = tf.Variable(tf.zeros([kernel_shape[-1]]), name="biases") 

     conv = tf.nn.conv2d(input=input_data, filter=kernel, strides=strides, padding="SAME", name="convolutions") 
     result = activation(tf.nn.bias_add(conv, bias), name="activations") 

    tf.scalar_summary(name + "/mean", tf.reduce_mean(kernel))  
    return result 

и использовать summary_op = tf.merge_all_summaries() в main. Также я внедрил train_op и valid_op, что и вызывает функцию inference. Однако появляется ошибка, что у нас есть повторяющиеся теги для scalar_summary, то есть inference используется как в train_op, так и в valid_op, что приводит к дублированию, скажем, conv1/mean.

Как это сделать? Мне нужно запустить поезд и валидацию, используя ту же функцию inference.

ответ

2

Как показывает ошибка, вы не можете иметь два сводки с одним и тем же тегом. Это происходит в вашем случае, потому что вы вызываете tf.scalar_summary дважды с тем же тегом, один раз при построении train_op и один раз при построении valid_op. Вот возможное решение: Вы можете добавить флаг в свою inference функцию, скажем is_training, чтобы указать, что код вызывается для построения части учебного графика. Вам нужно будет пометить этот флаг для всех ваших функций слоя. В convolution, например, вы должны сделать следующее:

if is_training: 
    tf.scalar_summary(name + "/mean", tf.reduce_mean(kernel)) 
return result 

При построении train_op, вы передаете is_training=True, и при построении valid_op, вы передаете is_training=False. Существует пример такого шаблона программирования here в начальной модели.

+0

Таким образом, решение состоит в том, чтобы избежать явных ясностей при проверке. Я рассматривал этот подход, но надеялся, что есть более умный. В любом случае, спасибо за помощь! – nmerci

+0

Другой вопрос: используя этот подход, резюме TEST будет добавлено в резюме TRAIN. Я могу инкапсулировать сводку теста тегом test/и использовать отдельный summary_writer. Но есть ли разумный подход к управлению резюме? – nmerci

0

Другой способ - использовать разные области имен для сводок, а затем фильтровать их с помощью аргумента scope merge_summary, а не merge_all_summaries.