2018-06-26《TensorFlow模型保存、提取、预测》更新版

任务一:用保存好的模型做预测

由于经常要使用tensorflow进行网络训练,但是在用的时候每次都要把模型重新跑一遍,这样就比较麻烦;另外由于某些原因程序意外中断,也会导致训练结果拿不到,而保存中间训练过程的模型可以以便下次训练时继续使用。所以学会tensorflow的save model和load model非常有用。

英文学习手册:A quick complete tutorial to save and restore Tensorflow models

手册内容

1.什么是Tensorflow模型?

当你训练完一个神经网络后,你可能想保存它,方便将来用上,直接用的产品上,不用再经过漫长的训练。Tensorflow模型主要包含两个内容:1)我们设计的网络图  2)我们训练过程中得到的网络图中的变量(variable)参数值。 因此,Tensorflow主要由两个文件来描述:

a)Meta graph:这个文件主要保存整个Tensorflow图模型,包含所有的变量(variables)、操作(operations)、集合(collections)等。这个文件的扩展为.meta

b)Checkpoint file:这个二进制文件包含所有的权重值、偏量值、梯度下降值以及其他变量值。这个文件的扩展为.ckpt。

2.如何保存Tensorflow模型

语句1:saver=tf.train.Saver()

在Tensorflow中,如果你想保存图模型和所有的参数值,那么首先,我们应该使用tf.train.Saver()创建一个模型保存类的实例。

语句2:saver.save(sess,'my_model')

注意:Tensorflow变量值只存在于会话执行中,因此保存模型的语句saver.save(sess,'my_model')应该在with tf.Session() as see:语句之后。

模型保存简单代码:

模型保存简单代码
模型保存后,生成的文件

注意:如果tf.train.Saver()实例化,没有传入具体的参数时,它就会保存模型中所有的变量。如果,我们只想保存自己想要的一些变量,我们就可以把自己想要保存的变量名,以list的形式放入tf.train.Save()中。如下:

只保存自己想要的变量

3.加载模型

模型的加载需要2步:

a)建立图模型

语句1:saver=tf.train.import_meta_graph('my_model.meta')

我们已经在保存的时候,将模型的图保存在.meta文件中了。因此使用语句:saver=tf.train.import_meta_graph('my_model.meta')。注意:此处虽然重新加载了图模型,但还没有将图中参数的实际数据放入。

b)加载参数

语句2:saver.restore(sess,tf.train.latest_checkpoint('你的模型路径名')

使用saver(它是tf.train.Saver()类实例化的对象)调用restore()方法,就能够加载模型参数。

模型加载简单代码:

模型加载简单代码

4.使用存储好的模型进行工作

前面已经学会了模型保存save和模型加载restore。此处要学习利用提前训练好的模型的参数,去预测、调试、或进一步训练。

无论什么时候使用Tensorflow,自己定义的模型图,都需要放入训练数据集和一些参数。标准的方式是,将训练集和参数使用placeholder占位符进行填充。注意:当模型保存的时候,其实使用placeholder占位符填充的的数据是没有保存的

注意:保存模型时,placeholder占位符的数据是没有保存的

A.原始模型,新数据

利用原始的网络结构,不同的数据集,我们只需将新的数据集通过feed_dict传入原始模型中就行。具体步骤如下:

1)创建会话tf.Session() 

2)加载模型 (加载图和加载参数)

3)使用graph=tf.get_default_graph()语句说明使用原始模型

4)获取原始模型中的placeholder和自己想要的ops,然后通过feed_dict字典,对占位符填充新的数据集。

5)使用sess.run()运行自己想要op和输入新数据集

【旧模型,新数据集】的一个简单代码

B.原始模型变新模型,新数据集

如果想要在原始训练好的模型的基础上添加更多的操作,然后再训练这个新模型,同样也是可以做到的。具体步骤如下:

1)创建会话tf.Session() 

2)加载模型 (加载图和加载参数)

3)使用graph=tf.get_default_graph()语句说明使用原始模型

4)获取原始模型中的placeholder,然后通过feed_dict字典,对占位符填充新的数据集。

5)获取原始模型中你想要的ops,然后添加新的ops,就构成了新模型。

6)使用sess.run()运行自己想要op和输入新数据集

【旧模型变新模型,新数据集】的一个简单代码


模型预测:


1
2
3

出现问题:KeyError: "The name 'encoder_inputs:0' refers to a Tensor which does not exist. The operation, 'encoder_inputs', does not exist in the graph."      错误提示:我保存的模型中,占位符encoder_inputs没有存在我当前保存的图中。



出现该问题的原因:这个placeholder,被放在了自定义命名空间Input下了,所以在获取这个变量名时,路径就没有写对。

出错原因,该tensor在命名空间下,所以自己的获取路径不对

问题解决办法:修改graph.get_tensor_by_name('tensor正确的路径名')。

解决办法

问题解决完毕!!!!



出现问题:KeyError: "The name 'decode:0' refers to a Tensor which does not exist. The operation, 'decode', does not exist in the graph."  错误提示:我想获取的decode其实不是一个简单的op,并不存在于保存的图模型中。

其实decode在程序中是一个自定义函数。可以使用tf.identity给op命名。具体改动:

tf.identity()将out.sample_id这个op命名为yaojuan

使用tf.identity()重新命名tensor名后,就能够很好的使用graph.get_tensor_by_name()获取op。

解决方法

问题解决完毕!!!




最终改动后的预测模型:

1
2
3

存在的问题:使用加载的模型,保证不了精确率!!!不知道是不是权值没有load上,或者是在预测过程中,参数权值自己又随意变动了?



参考文章:

【1】【tensorflow】保存模型、再次加载模型等操作

【2】seq2seq.py    

【3】Tensorflow动态seq2seq使用总结

【4】tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测

任务二:周杰伦粉丝团数据主题

1.下载安装Robo 3T   用于连接mongodb

2.数据存放在ai_crawler中

数据位置

3.使用python读取数据,并分析:还没开始。


任务三:情感分析代码

该代码已经拷到自己电脑上了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容