在这篇文章中,我们来看一下如何保存和恢复TensorFlow模型,我们在此介绍一些最有用的方法,并提供一些例子。

假如深层神经网络模型的复杂度十分高的话,那么练习它或许需求适当长的一段时刻,当然这也取决于你具有的数据量,运转模型的硬件等等。在大多数情况下,你需求经过保存文件来保证你实验的稳定性,避免假如中止(或一个过错),你可以持续从没有过错的当地开端。

更重要的是,关于任何深度学习的结构,像TensorFlow,在成功的练习之后,你需求从头运用模型的学习参数来完结对新数据的猜测。

怎么保存和康复TensorFlow练习的模型 怎么保存和康复TensorFlow练习的模型(tensorflow训练好的模型怎么保存)  TensorFlow 神经网络 深度学习 第1张

在这篇文章中,咱们来看一下怎么保存和康复TensorFlow模型,咱们在此介绍一些最有用的办法,并供给一些比如。

1. 首要咱们将快速介绍TensorFlow模型

TensorFlow的首要功用是经过张量来传递其根本数据结构类似于NumPy中的多维数组,而图表则表明数据核算。它是一个符号库,这意味着界说图形和张量将仅创立一个模型,而获取张量的具体值和操作将在会话(session)中履行,会话(session)一种在图中履行建模操作的机制。会话封闭时,张量的任何具体值都会丢掉,这也是运转会话后将模型保存到文件的另一个原因。

经过示例可以协助咱们更简略了解,所以让咱们为二维数据的线性回归创立一个简略的TensorFlow模型。

首要,咱们将导入咱们的库:

  1. importtensorflowastf
  2. importnumpyasnp
  3. importmatplotlib.pyplotasplt
  4. %matplotlibinline

下一步是创立模型。咱们将生成一个模型,它将以以下的方式预算二次函数的水平缓笔直位移:

  1. y=(x-h)^2+v

其间h是水平缓v是笔直的改变。

以下是怎么生成模型的进程(有关具体信息,请参阅代码中的注释):

  1. #Clearthecurrentgraphineachrun,toavoidvariableduplication
  2. tf.reset_default_graph()
  3. #Createplaceholdersforthexandypoints
  4. X=tf.placeholder("float")
  5. Y=tf.placeholder("float")
  6. #Initializethetwoparametersthatneedtobelearned
  7. h_est=tf.Variable(0.0,name='hor_estimate')
  8. v_est=tf.Variable(0.0,name='ver_estimate')
  9. #y_estholdstheestimatedvaluesony-axis
  10. y_est=tf.square(X-h_est)+v_est
  11. #DefineacostfunctionasthesquareddistancebetweenYandy_est
  12. cost=(tf.pow(Y-y_est,2))
  13. #Thetrainingoperationforminimizingthecostfunction.The
  14. #learningrateis0.001
  15. trainop=tf.train.GradientDescentOptimizer(0.001).minimize(cost)

在创立模型的进程中,咱们需求有一个在会话中运转的模型,而且传递一些实在的数据。咱们生成一些二次数据(Quadratic data),并给他们增加噪声。

  1. #Usesomevaluesforthehorizontalandverticalshift
  2. h=1
  3. v=-2
  4. #Generatetrainingdatawithnoise
  5. x_train=np.linspace(-2,4,201)
  6. noise=np.random.randn(*x_train.shape)*0.4
  7. y_train=(x_train-h)**2+v+noise
  8. #Visualizethedata
  9. plt.rcParams['figure.figsize']=(10,6)
  10. plt.scatter(x_train,y_train)
  11. plt.xlabel('x_train')
  12. plt.ylabel('y_train')

 怎么保存和康复TensorFlow练习的模型(tensorflow训练好的模型怎么保存) TensorFlow 神经网络 深度学习 第2张

2. The Saver class

Saver类是TensorFlow库供给的类,它是保存图形结构和变量的***办法。

(1) 保存模型

在以下几行代码中,咱们界说一个Saver目标,并在train_graph()函数中,经过100次迭代的办法最小化本钱函数。然后,在每次迭代中以及优化完结后,将模型保存到磁盘。每个保存在磁盘上创立二进制文件被称为“检查点”。

  1. #CreateaSaverobject
  2. saver=tf.train.Saver()
  3. init=tf.global_variables_initializer()
  4. #Runasession.Gothrough100iterationstominimizethecost
  5. deftrain_graph():
  6. withtf.Session()assess:
  7. sess.run(init)
  8. foriinrange(100):
  9. for(x,y)inzip(x_train,y_train):
  10. #Feedactualdatatothetrainoperation
  11. sess.run(trainop,feed_dict={X:x,Y:y})
  12. #Createacheckpointineveryiteration
  13. saver.save(sess,'model_iter',global_step=i)
  14. #Savethefinalmodel
  15. saver.save(sess,'model_final')
  16. h_=sess.run(h_est)
  17. v_=sess.run(v_est)
  18. returnh_,v_

现在让咱们用上述功用练习模型,并打印出练习的参数。

  1. result=train_graph()
  2. print("h_est=%.2f,v_est=%.2f"%result)
  3. $pythontf_save.py
  4. h_est=1.01,v_est=-1.96

Okay,参数是十分精确的。假如咱们检查咱们的文件体系,***4次迭代中保存有文件以及终究的模型。

保存模型时,你会注意到需求4种类型的文件才干保存:

  • “.meta”文件:包括图形结构。
  • “.data”文件:包括变量的值。
  • “.index”文件:标识检查点。
  • “checkpoint”文件:具有最近检查点列表的协议缓冲区。

检查点文件保存到磁盘 怎么保存和康复TensorFlow练习的模型(tensorflow训练好的模型怎么保存)  TensorFlow 神经网络 深度学习 第3张

图1:检查点文件保存到磁盘

调用tf.train.Saver()办法,如上所示,将避实就虚变量保存到一个文件。经过将它们作为参数,表情经过列表或dict传递来保存变量的子集,例如:tf.train.Saver({‘hor_estimate’: h_est})。

Saver结构函数的一些其他有用的参数,也可以操控整个进程,它们是:

  • max_to_keep:最多保存的检查点数。
  • keep_checkpoint_every_n_hours:保存检查点的时刻距离。假如你想要了解更多信息,请检查官方文档的Saver类,它供给了其它有用的信息,你可以探究检查。
  • Restoring Models

康复TensorFlow模型时要做的***件事便是将图形结构从“.meta”文件加载到当时图形中。

  1. tf.reset_default_graph()
  2. imported_meta=tf.train.import_meta_graph("model_final.meta")

也可以运用以下指令探究当时图形tf.get_default_graph()。接着第二步是加载变量的值。提示:值仅存在于会话(session)中。

  1. withtf.Session()assess:
  2. imported_meta.restore(sess,tf.train.latest_checkpoint('./'))
  3. h_est2=sess.run('hor_estimate:0')
  4. v_est2=sess.run('ver_estimate:0')
  5. print("h_est:%.2f,v_est:%.2f"%(h_est2,v_est2))
  1. $pythontf_restore.py
  2. INFO:tensorflow:Restoringparametersfrom./model_final
  3. h_est:1.01,v_est:-1.96

如前面所说到的,这种办法只保存图形结构和变量,这意味着经过占位符“X”和“Y”输入的练习数据不会被保存。

无论怎么,在这个比如中,咱们将运用咱们界说的练习数据tf,而且可视化模型拟合。

  1. plt.scatter(x_train,y_train,label='traindata')
  2. plt.plot(x_train,(x_train-h_est2)**2+v_est2,color='red',label='model')
  3. plt.xlabel('x_train')
  4. plt.ylabel('y_train')
  5. plt.legend()

 怎么保存和康复TensorFlow练习的模型(tensorflow训练好的模型怎么保存) TensorFlow 神经网络 深度学习 第4张

Saver这个类答应运用一个简略的办法来保存和康复你的TensorFlow模型(图形和变量)到/从文件,并保存你工作中的多个检查点,这或许是有用的,它可以协助你的模型在练习进程中进行微调。

4. SavedModel格局(Format)

在TensorFlow中保存和康复模型的一种新办法是运用SavedModel,Builder和loader功用。这个办法实际上是Saver供给的更高等级的序列化,它更适合于商业意图。

尽管这种SavedModel办法好像不被开发人员彻底承受,但它的创作者指出:它显然是未来。与Saver首要重视变量的类比较,SavedModel测验将一些有用的功用包括在一个包中,例如Signatures:答应保存具有一组输入和输出的图形,Assets:包括初始化中运用的外部文件。

(1) 运用SavedModel Builder保存模型

接下来咱们测验运用SavedModelBuilder类完结模型的保存。在咱们的示例中,咱们不运用任何符号,但也足以阐明该进程。

  1. y=(x-h)^2+v
0
  1. y=(x-h)^2+v
1

运转此代码时,你会注意到咱们的模型已保存到坐落“./SavedModel/saved_model.pb”的文件中。

(2) 运用SavedModel Loader程序康复模型

模型康复运用tf.saved_model.loader,而且可以康复会话规模中保存的变量,符号。

鄙人面的比如中,咱们将加载模型,并打印出咱们的两个系数(h_est和v_est)的数值。数值如预期的那样,咱们的模型现已被成功地康复了。

  1. y=(x-h)^2+v
2
  1. y=(x-h)^2+v
3

5. 定论

假如你知道你的深度学习网络的练习或许会花费很长时刻,保存和康复TensorFlow模型是十分有用的功用。该主题太广泛,无法在一篇博客文章中具体介绍。不管怎样,在这篇文章中咱们介绍了两个东西:Saver和SavedModel builder/loader,并创立一个文件结构,运用简略的线性回归来阐明实例。期望这些可以协助到你练习出更好的神经网络模型。

转载请说明出处
知优网 » 怎么保存和康复TensorFlow练习的模型(tensorflow训练好的模型怎么保存)

发表评论

您需要后才能发表评论