将tensorflow模型保存到文件

Rom*_*man 6 pickle python-2.7 tensorflow

我创建了一个张量流模型,我想将其保存到文件中,以便我可以在以后预测它.特别是,我需要保存:

  • input_placeholder
    (= tf.placeholder(tf.float32, [None, iVariableLen]))
  • solution_space
    (= tf.nn.sigmoid(tf.matmul(input_placeholder, weight_variable) + bias_variable))
  • 会话
    (= tf.Session())

我已经尝试过使用pickle,它可以用于其他对象,如sklearn二值化器等,但不是上面的,我在底部得到了错误.

我怎么泡菜:

import pickle
with open(sModelSavePath, 'w') as fiModel:
    pickle.dump(dModel, fiModel)
Run Code Online (Sandbox Code Playgroud)

哪里dModel是包含我想要保留的所有对象的字典,我用它来拟合.

有关如何挑选tensorflow对象的任何建议?

错误讯息:

pickle.dump(dModel, fiModel)
...
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle module objects
Run Code Online (Sandbox Code Playgroud)

Rom*_*man 7

我解决这个问题的方法是通过挑选像二进制文件这样的 Sklearn对象,并使用tensorflow的内置保存函数来实现模型:

保存张量流模型:
1)像往常一样构建模型
2)保存会话tf.train.Saver().例如:

oSaver = tf.train.Saver()

oSess = oSession
oSaver.save(oSess, sModelPath)  #filename ends with .ckpt
Run Code Online (Sandbox Code Playgroud)

3)这会将该会话中的所有可用变量等保存到其变量名称中.

加载张
量流模型:1)需要重新初始化整个流程.换句话说,需要声明变量,权重,偏差,损失函数等,然后tf.initialize_all_variables()通过传递初始化oSession.run()
2)该会话现在需要传递给加载器.我抽象了流程,所以我的加载器看起来像这样:

dAlg = tf_training_algorithm()  #defines variables etc and initializes session

oSaver = tf.train.Saver()
oSaver.restore(dAlg['oSess'], sModelPath)

return {
    'oSess': dAlg['oSess'],
    #the other stuff I need from my algorithm, like my solution space etc
}
Run Code Online (Sandbox Code Playgroud)

3)您需要预测的所有对象都需要从初始化中获取,在我的情况下,这些对象位于dAlg中

PS:像这样的泡菜:

with open(sSavePathFilename, 'w') as fiModel:
    pickle.dump(dModel, fiModel)

with open(sFilename, 'r') as fiModel:
    dModel = pickle.load(fiModel)
Run Code Online (Sandbox Code Playgroud)