【问题标题】:Tf Summary not giving the histograms but saves the session graph (pre-trained model)Tf Summary 不给出直方图但保存会话图(预训练模型)
【发布时间】:2019-08-11 13:14:25
【问题描述】:

我正在进行一项分析,以可视化在线提供的预训练模型的权重分布。它是在 CIFAR10 上训练的 Resnet18 模型。

我有以下代码从metackpt 恢复模型,然后我尝试使用tf.summary.histogram 创建卷积层的所有weightsbias 的直方图

`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 上看不到直方图。这里可能出了什么问题?

【问题讨论】:

    标签: python tensorflow histogram tensorboard summary


    【解决方案1】:

    将合并的汇总节点传递给sess.run 是不够的。您需要获取评估结果并将其传递给您的 FileWriter 实例的 add_summary 方法。

    # 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()
    

    【讨论】:

    • 哦,我明白了。谢谢。只是一个后续问题 - 是否有必要在会话内写入文件?
    • 不,没必要。但是,通常在会话中执行此操作,因为典型的会话是循环的,并且您会生成许多摘要,每个循环/批次都有一个摘要。如果是这种情况,您应该在下一个批处理循环之前写入缓冲区。
    猜你喜欢
    • 1970-01-01
    • 2020-02-23
    • 2023-04-02
    • 2017-08-19
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    相关资源
    最近更新 更多