模型持久化

前面几节已经讲了有关于队列和多线程的内容,内容不多但是却很实用。接下来我们讲一章新的内容:模型持久化。模型持久化的特点:实现模型持久化可以使得模型训练后的结果重复使用,这样既可以节省重复训练模型的时间,又可以提高编程工作的效率,因为遇到稍大的神经网络一般都要训练很多天。

通过代码实现

train.Saver类是Tensorflow提供的用于保存和还原一个神经网络模型的API,使用起来很简单,比如说要持久化一个向量项加,我们可以写成这样的代码:

上面的代码就实现了一个简单的Tensorflow模型持久化的功能。save()函数的sess参数用于指定要保存的模型会话,save_path参数用来指定路径。在代码中,通过Saver类的save()函数将Tensorflow()模型保存在指定路径下的model.ckpt文件中(TensorFlow 模型一般会保存在后缀名为 .ckpt 的文件中,代码中可以省略 . ckpt 后缀名)

如图所示生成了4个文件,其中checkpoint文件是一个文本文件,会被自动更新;其余3个文件都是二进制文件,无法打开。除了保存模型之外,Tensorflow还提供相应的函数来加载保存的模型,例如加载上面向量相加的模型,以下是代码展示:

这段代码和上面保存模型的代码很相似,但是省略了初始化变量的过程。使用restore()函数需要在模型参数恢复前定义计算图上的所有运算,并且变量名也要和模型中存储的变量名一样,这样就可以把变量的值通过模型加载进来。有时我们可能不希望重复定义计算图上的运算,因为这样的过程太繁琐。当然可以把模型的计算图也恢复出来,Tensorflow支持直接加载己经持久化的计算图,函数import_meta_graph()实现了这一功能,输入参数为.meta文件的路径。它返回一个Saver类实例,再调用这个实例的restore()函数就可以恢复其参数了,以下是操作代码:

上面的代码实例保存和加载了Tensorflow计算图上定义的全部变量,当然也可以保存或者加载部分变量,这样做使得我们在修改网络结构时更方便。实现保存和加载部分变量,可以在train.Saver类的同时提供一个列表来指定需要保存或加载的变量。以加载变量a为例,可以把代码这么写:

保存部分向量可以在声明train.Saver类的同时提供一个列表的方式来指定,这里不再列举,如果把print(sess.run(a))替换为print(sess.run(b)),那么执行时会出现变量没有初始化的错误提示,提示的信息很好理解,是说我们企图去使用一个未初始化的值 b。这是因为在初始化 Saver 类时只加载了 a,而没有加载 b,所以这种情况下对b进行调用就会出现这种错误。总结:以上就是本节的全部内容,主要就是讲述为了方便训练去Saver模型和restore模型。在下一节中我们会讲述模型持久化的原理。

关注小鲸融创,一起深度学习金融科技!


https://www.jianshu.com/p/cad357cf3c01

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论