Rom*_*man 6 pickle python-2.7 tensorflow
我创建了一个张量流模型,我想将其保存到文件中,以便我可以在以后预测它.特别是,我需要保存:
= tf.placeholder(tf.float32, [None, iVariableLen])
)= 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)
我解决这个问题的方法是通过挑选像二进制文件这样的 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)