如何保存并恢复PyBrain的训练?

33

有没有一种方法可以在PyBrain中保存和恢复已经训练好的神经网络,这样我就不必每次运行脚本都重新训练它了吗?

3个回答

45

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') 

1
从评论中可以看出,xml包在2010年9月进行了重命名:https://github.com/pybrain/pybrain/commit/fc8e7a8807963e93d8331f7ffbe2745eaff3ae92 - SiHa

11

NetworkWriterNetworkReader非常好用。我注意到当使用pickle保存和加载后,网络不能再通过训练函数进行更改。因此,我建议使用NetworkWriter方法。


2

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')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接