tensorflow保存模型 保存好训练的模型,restore 后验证集的正确率很低

定义一些训练中使用的数据集,预先设定的有mnist等数据集,如果有像训练自己的数据集需要在datasets中进行定义

定义了一些常见的网络结构,如AlexNet等

验证模型性能的入口代码

下载站还数据集格式的入口代码

第二处修改image/format部分,将之修改为:

此处定义了图片的默认格式。收集的卫星图片的格式为jpg图片,因此修改为jpg 。修改完satellite.py后,还需要在同目录的dataset_factory.py文件中注册satellite数据库。未修改的dataset_factory. py 中注册数据库的对应代码为:

2.3 准备训练文件夹

定义完数据集后,在slim文件夹下再新建一个satellite目录,在这个目录中,完成最后的几项准备工作:

新建一个data目录,并将转换好格式的训练数据复制进去。

新建一个空的train_dir 目录,用来保存训练过程中的日志和模型。

在slim 文件夹下,运行以下命令就可以开始训练了:

–save_summaries_secs=2 :每隔2s就会将日志写入到train_dir中。可以用TensorBoard查看日志。此处为了方便观察,设定的时间间隔较多,实际训练时为了性能考虑,可以设定较长的时间间隔。

进行训练,去掉后就可以训练模型中的所有参数了。

secs=300 指定了每隔300s 保存一次,即5min)。程序还会把当前模型保存到同样的文件夹中,命名格式和第一次保存的格式一样。因为模型比较大,程序只会保留最新的5 个模型。

此外,**如果中断了程序井再次运行,程序会首先检查train dir 中有无已经保存的模型,如果有,就不会去加载checkpoint_path中的预训练模型, 而是直接加载train dir 中已经训练好的模型,并以此为起点进行训练。**Slim之所以这样设计,是为了在微调网络的时候,可以方便地按阶段手动调整学习率等参数。

2.5 验证模型准确率

命令中所涉及到的参数解释如下:

--checkpoint_path=satellite/train _ dir: 这个参数既可以接收一个目录的路径,也可以接收一个文件的路径。如果接收的是一个目录的路径,如这里的satellite/train_dir就会在这个目录中寻找最新保存的模型文件,执行验证。也可以指定一个模型验证,以第300步为例,在satellite/train_ dir

运行完命令后出现出现如下运行结果:

Accuracy表示模型的分类准确率,而Recall_5 表示Top 5 的准确率,即在输出的各类别概率中,正确的类别只要落在前5 个就算对。由于此处的类别数比较少,因此可以不执行Top 5 的准确率,民而执行Top 2 或者Top 3的准确率,只要在eval_image_classifier.py 中修改下面的部分就可以了:

  1. 导出模型并对单张图片进行识别

一般我们将模型训练完后会部署训练好的模型并对单张图片做识别。TensorFlow Slim提供了导出网络结构的脚本export_inference_ graph.py 。首先在slim 文件夹下运行:

脚本(在chapter_3 文件夹下运行),命令如下所示:

lookup 定义了一个NodeLookup 类,它会读取label文件,并将模型输出的类别id转换成实际类别名。

之后我们来看这个脚本应该如何使用:

--model_path就是之前导出的模型frozen_graph. pb 。模型的输出实际是“第0 类’、“第1 类”……所以用--label_path 指定了一个label文件,label文件中按顺序存储了各个类别的名称,这样脚本就可以把类别的id号转换为实际的类别名。–image _file 是需要测试的单张图片。脚本的运行结果类似于:

这就表示模型预测图片对应的最可能的类别是water,接着是wetland 、urban 、wood 等。score 是各个类别对应的Logit 。

 本次实验通过使用TensorFlow Slim 微调预训练模型,包括数据准备、定义新的datasets文件、训练、验证、导出模型井测试单张图片等,让学生掌握微调神经网络的基本原理以及了解图像识别模型在训练时具体的运行过程。通过本章的学习让学生可以修改对应的代码来训练自己的数据,来打造自己的图像识别模型。这有助于激发学生的独立思考能力和动手实践能力。

}

在Loss中加入参数w的平方和,这样训练过程中就会抑制w的值,w的值小,曲线就比较平滑,从而减小过拟合,参考公式如下图:

正则化是不影响你去拟合曲线的,并不是所有参数都会被无脑抑制,实际上这是一个动态过程,是cross_entropy和L2 loss博弈的一个过程。训练过程会去拟合一个合理的w,正则化又会去抑制w,两项相抵消,无关的wi越变越小,但是比零强,有用的wi会被保留,处于一个合理的范围。过多的道理和演算就不再赘述。

因为MNIST本来就不复杂,所以FC之前不能做太多CONV,会导致效果太好,不容易分出差距。为展示l2 norm的效果,我只留一层CONV,两层conv可以作为对照组。

 
 

 
 
 
明显每一步train中都好于test,出现过拟合!
 
 
 
过拟合现象明显减轻了不少,甚至有时测试集还好于训练集(因为验证集大小的关系,只展示大概效果。)
 

对照组:不使用l2正则,只用dropout:过拟合现象减轻。

 
 
 
 

对照组:双层conv,本身过拟合不明显,结果略

 
}

Google 开发者大会 (Google Developer Days,简称 GDD) 是展示 Google 最新开发者产品和平台的全球盛会,旨在帮助你快速开发优质应用,发展和留住活跃用户群,充分利用各种工具获得更多收益。2018 Google 开发者大会于 9 月 20 日和 21 日于上海举办。:point_right:

2018 年 9 月 21 日 冯亦菲(Google Brain 软件工程师)带来一场《用 TensorFlow 高层 API 来构建机器学习模型》的演讲,本文将对演讲做一个回顾。


构建机器学习模型是一个循序渐进的过程:

  • 首先获取数据集,并明确机器学习所要解决的问题;
  • 接下来处理数据集,让我们的模型能够快速的理解形式;
  • 紧接着搭建机器学习模型的结构,并且训练评估我们的模型;
  • 最后,当模型达到我们预先设定的目标,就可以将其打包投入到生产环境中去。

本例中的所使用的数据集为科罗拉多州森林植被数据集。该数据集记录了美国科罗拉多州不同地块的森林植被类型,每个样本包含了描述每块土地的若干特征,包括海拔、坡度、到水源的距离、遮阳情况和土壤类型,并且随同给出了地块的已知森林植被类型。数据集下载

按照链接地址下载的原始数据集是以逗号分割、每行有55个整数列,如下图:


每一列所代表的含义如下图所示:


其中,上图中橘黄色方框选中的区域就是我们此次想要推测的自然保护区类型。

在了解我们所有的数据集之后,可以着手使用 TensorFlow 来构建我们的模型。


  • 快速调试即刻的运行错误并通过 Python 工具进行整合
  • 借助易于使用的 Python 控制流支持动态模型
  • 为自定义和高阶梯度提供强大支持

上图中虽然我们可以看出每一行原始数据的含义,但是想要带入到机器学习的模型中,我们还需要对数据进行解析。

//土壤类型是一个特征,而不是 40 个单独的特征 //重新组成 12 个特征 //给每个特征取一个名称 //生成自然保护区标签,在原始数据集中它的一个长度为 4 //利用解析函数解析,并以 64 为单位对训练集进行分组

因为我们使用的是 Eager 执行模式,所以我们可以直接打印查看数据,如下图所示:


//把离散的类别,变成对模型有意义的连续的数值

这里我们使用的是 keras API 来搭建我们的模型,通过 keras 可以像搭积木一样来构造模型。


损失值与准去率如下图所示:


如果验证结果达到我们所设定的要求,可以利用 SavedModel 打包。

//重新训练已训练的模型

至此我们完成了构造机器学习模型的完整流程。在我们日常的生产环境中,不存在一次构建完美模型的情况。所以,我们可以根据上面构建模型的 5 个步骤,就单个步骤或多这个步骤进行改进。例如,我们可以获得跟多原始数据,以提高模型的普遍性等等。

前面我们使用的是 keras 模型,下面我们使用 Wide & Deep 模型就实现。

//重新训练已训练的模型

以上就是本次演讲的全部内容,希望对大家有所帮助。

}

我要回帖

更多关于 tensorflow保存模型 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信