如何在 theano 中保存/序列化训练好的模型?
How to save / serialize a trained model in theano?
我按照 loading and saving 上的记录保存了模型。
# saving trained model
f = file('models/simple_model.save', 'wb')
cPickle.dump(ca, f, protocol=cPickle.HIGHEST_PROTOCOL)
f.close()
ca
是训练有素的自动编码器。它是 class cA
的实例。从我构建和保存模型的脚本中,我可以毫无问题地调用 ca.get_reconstructed_input(...)
和 ca.get_hidden_values(...)
。
在不同的脚本中,我尝试加载经过训练的模型。
# loading the trained model
model_file = file('models/simple_model.save', 'rb')
ca = cPickle.load(model_file)
model_file.close()
我收到以下错误。
ca = cPickle.load(model_file)
AttributeError: 'module' object has no attribute 'cA'
腌制对象的所有 class 定义都需要由执行 unpickling 的脚本知道。在其他 Whosebug 问题中有更多关于此的内容(例如 AttributeError: 'module' object has no attribute 'newperson')。
只要您正确导入 cA
,您的代码就是正确的。鉴于您遇到的错误,情况可能并非如此。确保您使用的是 from cA import cA
而不仅仅是 import cA
.
或者,您的模型是由其参数定义的,因此您可以只选择参数值)。这可以通过两种方式完成,具体取决于您的观点。
保存 Theano 共享变量。这里我们假设 ca.params
是 Theano 共享变量实例的常规 Python 列表。
cPickle.dump(ca.params, f, protocol=cPickle.HIGHEST_PROTOCOL)
保存存储在 Theano 共享变量中的 numpy 数组。
cPickle.dump([param.get_value() for param in ca.params], f, protocol=cPickle.HIGHEST_PROTOCOL)
当您想要加载模型时,您需要重新初始化参数。例如,创建 cA
class 的新实例,然后
ca.params = cPickle.load(f)
ca.W, ca.b, ca.b_prime = ca.params
或
ca.params = [theano.shared(param) for param in cPickle.load(f)]
ca.W, ca.b, ca.b_prime = ca.params
请注意,您需要同时设置 params
字段和单独的参数字段。
另一种保存模型的方法是保存其权重和架构,然后加载它们,就像我们对预训练 CNN 所做的那样:
def save_model(model):
model_json = model.to_json()
open('cifar10_architecture.json', 'w').write(model_json)
model.save_weights('cifar10_weights.h5', overwrite=True)
source/ref : https://blog.rescale.com/neural-networks-using-keras-on- 重新缩放/
我按照 loading and saving 上的记录保存了模型。
# saving trained model
f = file('models/simple_model.save', 'wb')
cPickle.dump(ca, f, protocol=cPickle.HIGHEST_PROTOCOL)
f.close()
ca
是训练有素的自动编码器。它是 class cA
的实例。从我构建和保存模型的脚本中,我可以毫无问题地调用 ca.get_reconstructed_input(...)
和 ca.get_hidden_values(...)
。
在不同的脚本中,我尝试加载经过训练的模型。
# loading the trained model
model_file = file('models/simple_model.save', 'rb')
ca = cPickle.load(model_file)
model_file.close()
我收到以下错误。
ca = cPickle.load(model_file)
AttributeError: 'module' object has no attribute 'cA'
腌制对象的所有 class 定义都需要由执行 unpickling 的脚本知道。在其他 Whosebug 问题中有更多关于此的内容(例如 AttributeError: 'module' object has no attribute 'newperson')。
只要您正确导入 cA
,您的代码就是正确的。鉴于您遇到的错误,情况可能并非如此。确保您使用的是 from cA import cA
而不仅仅是 import cA
.
或者,您的模型是由其参数定义的,因此您可以只选择参数值)。这可以通过两种方式完成,具体取决于您的观点。
保存 Theano 共享变量。这里我们假设
ca.params
是 Theano 共享变量实例的常规 Python 列表。cPickle.dump(ca.params, f, protocol=cPickle.HIGHEST_PROTOCOL)
保存存储在 Theano 共享变量中的 numpy 数组。
cPickle.dump([param.get_value() for param in ca.params], f, protocol=cPickle.HIGHEST_PROTOCOL)
当您想要加载模型时,您需要重新初始化参数。例如,创建 cA
class 的新实例,然后
ca.params = cPickle.load(f)
ca.W, ca.b, ca.b_prime = ca.params
或
ca.params = [theano.shared(param) for param in cPickle.load(f)]
ca.W, ca.b, ca.b_prime = ca.params
请注意,您需要同时设置 params
字段和单独的参数字段。
另一种保存模型的方法是保存其权重和架构,然后加载它们,就像我们对预训练 CNN 所做的那样:
def save_model(model):
model_json = model.to_json()
open('cifar10_architecture.json', 'w').write(model_json)
model.save_weights('cifar10_weights.h5', overwrite=True)
source/ref : https://blog.rescale.com/neural-networks-using-keras-on- 重新缩放/