zoukankan      html  css  js  c++  java
  • tensorflow简单记录summary方法

    虽然tf官方希望用户把 train , val 程序分开写,但实际开发中,明显写在一起比较简单舒服,但在保存数据到 summary 时, val 部分和 train 部分不太一样,会有一些问题,下面讨论如何在这种情况下记录 train/val 的 summary 。

    假设训练时的主要代码结构如下:

    
    
    losssummary = ...
    othersummary = ...
    trainsummaries = tf.summary.merge([losssummary, othersummary])
    for i in range(self.batchnum):
    batching data...
    ... ... step ... trainsummaryresults
    = sess.run(... , trainsummaries)
    trainfilewriter.addsummary(trainsummaryresults)
    if step % self.saveinter == 0:
    ... # save checkpoint
    if step % self.dispinter == 0:
    ... # display training process
    if step % self.testinter == 0:
    ... # run model on test data

    保存 train 部分的 summary 很简单,tf的示例代码也给了很多,先利用 sess.run 计算出 trainsummaryresults ,即当前 batch 的统计数据,然后保存到文件

    但在 val 部分时,一般都在所有验证数据上获取 loss , accuracy 等 summary 数据,再保存到文件。这样只有两种方法:

    1. val 部分的 batchsize 改为验证集大小
    2. batchsize 不变,对所有 batch 上获取的 loss , accuracy 计算平均

    第一种方法存在的问题是,如果验证集数据较大, batchsize 会设置的较大,可能会引起内存or显存溢出,这个没法解决。

    第二种方法存在的问题是,没法按照train部分的做法做,因为要的是整个验证数据的平均值,而不是每个 batch 的值,这个有办法解决。

    在设计模型结构的时候,无论是 train 还是 val ,网络结构都是一样的,每次只能计算一个 batch 的 loss , accuracy ,没法单独为验证集修改。于是我想到了如下投机取巧的方法:先利用循环计算验证集每个 batch 的 loss , accuracy ,进行累加,记为 averageloss 和 averageaccuracy ,然后进行如下操作:

    testsummaries = tf.Summary()
    lossval = testsummaries.value.add()
    lossval.tag = 'loss'
    lossval.simplevalue = averageloss / batchnum
    accval = testsummaries.value.add()
    accval.tag = 'accuracy'
    accval.simplevalue = averageaccuracy / batchnum
    testfilewriter.addsummary(testsummaries, step)

    其实就是自己创建一个 test_summaries ,把需要的东西填进去,模仿利用 sess.run 生成的 train_summary_results ,再保存到文件。大家如果感兴趣可以把 train_summary_results 打印出来,其实就是这么个结构。目前我只保存过 scalar ,但是其他值应该也可以这么保存。

  • 相关阅读:
    ajax GET 传输中文乱码
    php 验证码 图像存在错误 无法显示 解决方法
    ajax 简单实例
    PHP continue break 区别 用法
    php注意事项
    php7注意事项
    腾讯2015后台模拟题
    【leetcode】_3Sum
    最小的k个数 2.5
    《Hadoop权威指南》笔记 第三章 并行复制及存档
  • 原文地址:https://www.cnblogs.com/hrlnw/p/8378576.html
Copyright © 2011-2022 走看看