Tf Summary не предоставляет гистограммы, но сохраняет график сеанса (предварительно обученная модель)

#python #tensorflow #histogram #tensorboard #summary

#python #tensorflow #гистограмма #тензорная панель #Краткие сведения

Вопрос:

Я провожу анализ, чтобы визуализировать распределение весов для предварительно обученной модели, доступной онлайн. Это модель Resnet18, обученная на CIFAR10.

У меня есть следующий код для восстановления модели из meta и ckpt , а затем я пытаюсь создать гистограмму всех weights и bias слоев свертки, используя tf.summary.histogram

 `with tf.Session(graph=tf.Graph()) as sess:
            read=tf.train.import_meta_graph(self.paths[0], clear_devices=True)
            try:
                read.restore(sess, tf.train.latest_checkpoint(self.paths[1]))
            except ValueError:
                try:
                    read.restore(sess, self.paths[1])
                except Exception as e:
                    print(e.message)

            # Summaries of weights
            summ_writer = tf.summary.FileWriter(self.sum_path, sess.graph)
            fp_summaries = []
            for lys in tf.trainable_variables():
                lay_nam = lys.name.split("/")[-2]
                if 'kernel' in lys.name:
                    with tf.name_scope(lay_nam '_hist'):
                        tf_w_hist = tf.summary.histogram('Weights', tf.reshape(lys.eval(), [-1]))
                        fp_summaries.extend([tf_w_hist])
                if 'bias' in lys.name:
                    with tf.name_scope(lay_nam '_hist'):
                        tf_b_hist = tf.summary.histogram('Bias', lys.eval())
                        fp_summaries.extend([tf_b_hist])
            tf_fp_summaries = tf.summary.merge(fp_summaries)
            # Run the graph
            output, _=sess.run([softmax, tf_fp_summaries], feed_dict={x: self.x_test[0:100, ]})
  

Однако события журнала, хранящиеся в папке, хранят только основной график. Гистограммы не отображаются на tensorboard . Что здесь может быть не так?

Ответ №1:

Недостаточно передать объединенный узел summary в sess.run . Вам нужно взять этот оцененный результат и передать его add_summary методу вашего FileWriter экземпляра.

 # evaluate the merged summary node in the graph
output, summ = sess.run([softmax, tf_fp_summaries], ...)
# explicitly write to file
summ_writer.add_summary(summ, global_step)
# optional, force to write to disk
summ_writer.flush()
  

Комментарии:

1. О, я понимаю. Спасибо. Просто последующий вопрос — необходимо ли записывать в файл внутри сеанса?

2. Нет, не обязательно. Однако обычно это делается внутри сеанса, потому что типичный сеанс повторяется, и вы генерируете много сводок, по одной для каждого цикла / пакета. Если это так, вам следует выполнить запись в буфер перед следующим пакетным циклом.