【发布时间】:2011-05-15 02:50:50
【问题描述】:
有没有办法在 PyBrain 中保存和恢复经过训练的神经网络,这样我就不必在每次运行脚本时重新训练它?
【问题讨论】:
标签: pybrain
有没有办法在 PyBrain 中保存和恢复经过训练的神经网络,这样我就不必在每次运行脚本时重新训练它?
【问题讨论】:
标签: pybrain
可以使用 python 内置的 pickle/cPickle 模块或 PyBrain 的 XML NetworkWriter 保存和加载 PyBrain 的神经网络。
# Using pickle
from pybrain.tools.shortcuts import buildNetwork
import pickle
net = buildNetwork(2,4,1)
fileObject = open('filename', 'w')
pickle.dump(net, fileObject)
fileObject.close()
fileObject = open('filename','r')
net = pickle.load(fileObject)
注意 cPickle 是用 C 实现的,因此应该比 pickle 快得多。用法应该和pickle大体相同,所以只需要导入并使用cPickle即可。
# Using NetworkWriter
from pybrain.tools.shortcuts import buildNetwork
from pybrain.tools.customxml.networkwriter import NetworkWriter
from pybrain.tools.customxml.networkreader import NetworkReader
net = buildNetwork(2,4,1)
NetworkWriter.writeToFile(net, 'filename.xml')
net = NetworkReader.readFrom('filename.xml')
【讨论】:
NetworkWriter 和 NetworkReader 工作得很好。我注意到通过pickle 保存和加载后,网络不再可以通过训练功能进行更改。因此,我建议使用NetworkWriter-方法。
【讨论】:
NetworkWriter 是要走的路。使用 Pickle,你不能像 Jorg 所说的那样重新训练网络。
你需要这样的东西:
from pybrain.tools.shortcuts import buildNetwork
from pybrain.tools.customxml import NetworkWriter
from pybrain.tools.customxml import NetworkReader
net = buildNetwork(4,6,1)
NetworkWriter.writeToFile(net, 'filename.xml')
net = NetworkReader.readFrom('filename.xml')
【讨论】: