第一篇博客:tensorboard采坑

博主分享了使用Tensorflow进行线性优化编程作业时遇到的坑,特别是关于Tensorboard参数可视化的过程。文章详细介绍了如何将kernel(权重)转换为图像,并揭示了启动Tensorboard时日志目录设置的重要性,强调了日志目录必须与启动命令行所在磁盘一致。最后展示了部分在Tensorboard上成功可视化的kernel图像。

第一次写博客,原因是在大三考试周的紧要关头被【线(ji)性(qi)优(xue)化(xi)】这门课的编程作业坑了........

心中愤懑不平,在这里调整一下,给自己一点微弱的成就感,如果还能帮到和我一样的“大白”那就再好不过了hh


  • Tensorflow参数训练结果的可视化

我要做的是tensorflow训练出的kernel(即权重)的可视化显示。

其实后来想想道理真的很简单:网络(CNN)训练完成后肯定会将模型参数都保存下来,这是训练的结果所在。我们只要知道这些结果的数值不就ok了吗?可视化也就是把参数值变成以下或者别的可能的图像:

  1. 有关训练轮数的折线图;
  2. 直方图
  3. 像素值
  4. ......

所以我们通过session.run(变量)得到参数值就好了,然后就是变成图像。以我的代码为例,把kernel变成像素值,然后记录:

        for var in tf.trainable_variables():
            if var.name == 'conv2d/kernel:0':
                print(var)
                kernel1 = sess.run('conv2d/kernel:0')  #获取参数值!!
                kmin = np.min(kernel1)
                kmax = np.max(kernel1)
                kernel1_n = (kernel1-kmin) / (kmax-kmin) #归一
                print(kernel1_n.shape)
                #维度位置交换,个数在最前、通道数在最后
                #因为图片输出函数tf.summary.image()需要输入维度的格式是(batch数,长,宽,彩色通道)
                kernel_transposed = tf.transpose(kernel1_n, [3, 0, 1, 2])
                tf.summary.image('filter1', kernel_transposed, max_outputs=32) # 32个kernel都记录下来
                merged = tf.summary.merge_all() #所有的summary操作集合起来

                summary_writer = tf.summary.FileWriter('/tmp/tensorboard', sess.graph) #写到磁盘
                summary_all = sess.run(merged) #启动所有的summary
                summary_writer.add_summary(summary_all, 0) # summary的结果传给writer写到磁盘,第二个参数需要的话就是训练的轮数(或者说时间参数)
                summary_writer.close()


  • Tensorboard巨坑

这里有一个坑,运气好了没关系,运气差了碰到这个问题都不知道为什么....这个问题是启动tensorboard时的日志的目录位置到底怎么写。

上面的代码中,控制summary写到磁盘什么位置的一行是:

                summary_writer = tf.summary.FileWriter('/tmp/tensorboard', sess.graph) #写到磁盘

这里我写的位置是:'/tmp/tensorboard'

通过尝试我发现,这并不是在我的项目目录下新建这个目录,而是在项目所在的磁盘(比如D盘)建立这个目录。所以说“写到磁盘”这句话莫名贴切。




发现了日志文件的位置,我在命令行cmd中输入以下指令启动tensorboard:


结果tensorboard告诉我什么都没有......

百般查询之后,通过我的实验确认,执行指令时所在磁盘应该要和日志所在的磁盘是同一个......尼玛还真是奇怪的统一。

如果你比较懒,那就让日志输出到C盘去,把writer的那行代码指出的目录改掉,例如:

                summary_writer = tf.summary.FileWriter('C:/tmp/tensorboard', sess.graph) 

这样每次打开cmd都在用户目录也不用去cd了。


  • Kernel可视化结果

最终我在tensorboard上得到的部分kernel图像如下:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值