虽然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 ,但是其他值应该也可以这么保存。

tensorflow简单记录summary方法的更多相关文章

  1. windows安装tensorflow简单直接的方法(win10+pycharm+tensorflow-gpu1.7+cuda9.1+cudnn7.1)

    安装tensorflow-gpu环境需要:python环境,tensorflow-gpu包,cuda,cudnn 一,安装python,pip3直接到官网下载就好了,下载并安装你喜欢的版本 https ...

  2. js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝

    一.一个简单的js方法实现集合拷贝 做web项目的时候,少不了和js中的数组,集合等对象接触,那么你肯定会发现,在js中存在一个怪异的现象就是数组和集合的拷贝都是地址复制,并不是简单的数据的拷贝. 举 ...

  3. Tensorflow简单CNN实现

    觉得有用的话,欢迎一起讨论相互学习~Follow Me 少说废话多写代码~ """转换图像数据格式时需要将它们的颜色空间变为灰度空间,将图像尺寸修改为同一尺寸,并将标签依 ...

  4. ASP.NET开发常用简单实用的方法

    ASP.NET开发简单实用的方法 一.打印和导出 打印和导出EXCEL在目前ASP.NET开发中可以说是必要的,有时候针对不同数据难易程度下,用有效快速的方法是解决办法的有效途径之一. 1.打印 后台 ...

  5. TensorFlow使用记录 (六): 优化器

    0. tf.train.Optimizer tensorflow 里提供了丰富的优化器,这些优化器都继承与 Optimizer 这个类.class Optimizer 有一些方法,这里简单介绍下: 0 ...

  6. JSP简单记录

    JSP,全称是Java Server Page,是运行在服务器端的页面,是建立在Servlet规范的动态网页技术,JSP文件在第一次请求时,会被编译成Servlet,所以JSP也可以看成是运行中的Se ...

  7. CocoaPods 的简单快速安装方法

    CocoaPods 的简单快速安装方法(Setting up CocoaPods master repo 卡着不动,是因为淘宝镜像已经不能用了. 一.git clone方法安装cocoapods 镜像 ...

  8. MySQL把多个字段合并成一条记录的方法

    转:http://www.111cn.net/database/mysql/71591.htm MySQL把多个字段合并成一条记录的方法 在mysql中字段合并可以使用很多函数来实现,如可以利用 GR ...

  9. TensorFlow简单介绍和在centos上的安装

    ##tensorflow简单介绍: TensorFlow™ is an open source software library for numerical computation using dat ...

随机推荐

  1. 2017.07.11【NOIP提高组】模拟赛B组

    Summary 今天的比赛打得还不错,第一题被同桌灌输的贪心,纯模拟洗脑了,然后steal的看了一下,发现怎么也对不了,一直在检查.最后10分钟才找出反例,推出动态规划方程,没有想到怎么转移,比赛就结 ...

  2. 用shell脚本守护后台进程

    假如现在在 crond 中添加了一个每分钟执行的定时任务如下: */ * * * * root cd /data/sbin; sh test.sh >/dev/>& 为了防止上一个 ...

  3. 学习Struts--Chap07:Struts2文件上传和下载

    1.struts2文件上传 1.1.struts2文件上传的基本概述 在开发web应用的时候,我们一般会为用户提供文件上传的功能,比如用户上传一张图像作为头像等.为了能上传文件,我们必须将表单的met ...

  4. Java基础知识总结--final、finally、finalize的区别

    谈谈final.finally.finalize的区别 1.final修饰符:如果一个类被声明为final,意味着这个类不能再被派生出新的子类,不能作为父类被别的类继承.因此,一个类不能即被声明为ab ...

  5. SQL 关联外键报错类型不匹配

    如题,关联外键的时候,报错类型匹配.但是两个 类型都是int sql 如下: CREATE TABLE IF NOT EXISTS `alert_receiver_map` ( `id` INT UN ...

  6. 180400之pycharm快捷方式汇总

    1.Pycharm中快捷键大全,遇到一个更新一个 撤销与反撤销:Ctrl + z,Ctrl + Shift + z 缩进.不缩进:Tab.Shift + tab 运行:Shift + F10 批量注释 ...

  7. django之视图获取用户请求相关信息以及请求头

    def index(request): print(type(request)) print(request.environ['HTTP_USER_AGENT'])#字典格式 print(reques ...

  8. Linux之源码安装nginx,并按照作业一描述的那样去测试使用

    作业五:源码安装nginx,并按照作业一描述的那样去测试使用 [root@localhost nginx]# yum install gcc-* glibc-* openssl openssl-dev ...

  9. js中字符串的方法

    js String对象中常用方法小结,需要的朋友可以参考下: 1.charCodeAt方法返回一个整数,代表指定位置字符的Unicode编码. strObj.charCodeAt(index) 说明: ...

  10. 中国大学MOOC-陈越、何钦铭-数据结构-2017春

    中国大学MOOC-陈越.何钦铭-数据结构-2017春 学习地址 详细学习内容 Github记录地址 欢迎fork和star,有惊喜值得学习! 参考学习笔记 参考AC代码 数据结构和算法学习笔记 学习内 ...