有没有一种方法可以在PyBrain中保存和恢复已经训练好的神经网络,这样我就不必每次运行脚本都重新训练它了吗?
PyBrain的神经网络可以使用Python内置的pickle/cPickle模块保存和加载,也可以使用PyBrain的XML NetworkWriter进行保存和加载。
# 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')