我用pybrain做了一个监督神经网络,它工作的很好,当我用“trainer.testOnData(test_data,verbose = True)”测试它时,我可以看到输出(和错误)但我还想保存它以供进一步分析。我没有找到pybrain文档。有没有人与pybrain合作知道我能做到吗?谢谢(我希望这不是一个明显的事情)。在Pybrain中保存神经网络测试输出
回答
我和你有同样的问题,并很快回答问题:没有没有直接的方式来做到这一点。
但它当然是可行的。
惹pybrain代码
这似乎是最简单的解决方案,在这里你有BackpropTrainer.testOnData
源代码。如您所见,如果verbose
设置为True
,则会打印所有错误。
if verbose:
print('All errors:', ponderatedErrors)
assert sum(importances) > 0
avgErr = sum(errors)/sum(importances)
if verbose:
print('Average error:', avgErr)
print(('Max error:', max(ponderatedErrors), 'Median error:',
sorted(ponderatedErrors)[len(errors)/2]))
return avgErr
我们可以把它用最后一行改变返回所有错误一起avgErr
:
return avgErr, ponderatedErrors
然后你赶上值只是拆包结果:
avgErr, allErrors = trainer.testOnData(dataSet, verbose=True)
,或者当你不想要所有的错误:
avgErr, _ = trainer.testOnData(dataSet, verbose=True)
这是最简单的解决方案。但是没有人喜欢乱用外部库的源代码。
更改标准输出,它赶上一个文件并将其转换
这几个步骤的过程,因为testOnData
永远不会返回的所有错误,只是打印,它意味着你必须转换字符串转换成有用的东西(让我们尝试与列表)。
变化stdout
打印到文件
这很简单:
import sys
sys.stdout = open('./OURFILE', 'w+')
所以,现在当我们运行testOnData
输出保存在文件中。
的工作,串
我们在我们的文件中第二行intrested,所以让我们只得到它:
our_file = open('./OURFILE', 'r')
our_file.next() # get rid of first line
our_line = our_file.next() # save second line
因为如何pybrain是写我们这行看起来是这样的:
('All errors:',HERE_IS_LIST_OF_ERRORS)
现在,我不是正则表达式向导,所以我只会在列表开始时计数。
still_string = our_line[16:-1]
它会给我们一个只包含一个列表的字符串。而现在你用甘蔗来eval
改变蜇到适当的列表:
list_of_errors = eval(still_string)
我希望有所帮助。
非常感谢Pawel,coudn't要求更好的答案:解决了我的问题! – 2014-09-02 17:06:16
我很高兴能帮到你。请点击旁边的灰色复选标记接受答案,同时upvote也是很好的感谢形式;) – 2014-09-02 17:10:35
对不起,我第一次来这里。我仍然缺乏足够的声望来鼓掌,但我会做一次;) – 2014-09-02 17:17:53
我可能对派对有点迟到,但在搜索数据集测试中的网络结果和地面真相的方向时发现了您的问题。
所以它根本就不存在,但为了统计分析和可视化的目的,它应该是。所以让我们做吧!
但是我们没有必要弄乱独立的库代码。你可能会破坏第三方库中的某些东西,并且你的代码变得完全不可移植(除非你指定了在哪里应用补丁的具体方向,但是呃..你真的不应该这么做)。有一个很好的pythonic解决方案 - OOP的力量。
才发现所需要的功能与
import inspect
print inspect.getsource(BackpropTrainer.testOnData)
的代码只需复制该代码,并准备使用OOP的所有可能会在你的问题。 实现一个自定义类(您可以将它存储在单独的模块中,并将其导入或与您的代码一起内联执行),并看到它从原始类(在此例中为BackpropTrainer
)继承,并粘贴您从第1步获得的函数(请记住将函数名称更改为与现有名称不冲突的内容)。
class myOwn_BackpropTrainer(BackpropTrainer):
def myOwn_testOnData(self, dataset=None, verbose=False):
"""Compute the MSE of the module performance on the given dataset.
If no dataset is supplied, the one passed upon Trainer initialization is
used."""
if dataset == None:
dataset = self.ds
dataset.reset()
if verbose:
print '\nTesting on data:'
errors = []
importances = []
ponderatedErrors = []
gt_values = []
for seq in dataset._provideSequences():
self.module.reset()
e, i = dataset._evaluateSequence(self.module.activate, seq, verbose)
importances.append(i)
for input, target in seq:
gt_values.append([self.module.activate(input), target])
errors.append(e)
ponderatedErrors.append(e/i)
if verbose:
print 'All errors:', ponderatedErrors
assert sum(importances) > 0
avgErr = sum(errors)/sum(importances)
if verbose:
print 'Average error:', avgErr
print ('Max error:', max(ponderatedErrors), 'Median error:',
sorted(ponderatedErrors)[len(errors)/2])
return gt_values, avgErr
通知书双空格和我自己的gt_values
变量的声明,并在声明return
的变化分离线。 现在我可以简单地用我们的类的实例代替BackpropTrainer类实例,并调用我们的新功能:
load_dataset(ds)
trainer = t3_BackpropTrainer(net, ds, learningrate = 0.04, momentum=0.7, weightdecay=0.02, verbose=True)
result, _ = trainer.t3_testOnData(verbose = True)
的result
变量现在存储与网络的结果和地面实况准备用于可视化或统计信息收集的数组。
这样你就可以在代码中保留所有的自定义,并且不会混淆原始的第三方库代码。现在,您可以轻松地与其他人分享您的代码,更新库,而不必担心您的补丁程序将消失并避免更多麻烦。
- 1. 运行神经网络pybrain
- 2. Pybrain神经网络:_convertToOneOfMany错误
- 3. PyBrain神经网络力初始化
- 4. 多输出神经网络
- 5. 2输出神经网络?
- 6. 神经网络中的连续输出
- 7. 神经网络的输入/输出
- 8. XOR Hebbian测试/示例神经网络
- 9. Encog神经网络验证/测试
- 10. 使用Keras Python测试神经网络
- 11. 神经网络的激活/输出
- 12. 神经网络输出分组0.5?
- 13. 神经网络模型的输出
- 14. 解释神经网络输出
- 15. 神经网络规范输出数据
- 16. TensorFlow(神经网络)FC输出大小
- 17. 神经网络收敛到零输出
- 18. 调试神经网络
- 19. 如何在Theano中打印或保存每层神经网络的输出值?
- 20. 我的神经网络有多少个输出神经元?
- 21. 神经网络 - 预测输出层只有一个神经元的MNIST数字
- 22. 神经网络在训练并保存到文件后如何测试?
- 23. 如何计算或监测pybrain中的神经网络的训练?
- 24. 神经网络
- 25. 神经网络
- 26. 训练后在神经网络中增加更多输出神经元?
- 27. 神经网络的输出每次都保持相同的值
- 28. 添加到数据集后重新调整pybrain神经网络
- 29. Python:使用PyBrain和Multiprocessing的多线程学习神经网络
- 30. Pybrain前馈神经网络训练错误完全卡住
请在您的答案中包含python标签,它会在整个线程中触发语法高亮显示。 – 2014-09-01 16:19:19
你的问题和这个相似吗? http://stackoverflow.com/questions/6006187/how-to-save-and-recover-pybrain-traning – rossdavidh 2014-09-01 23:28:01
@rossdavich - 不,我想能够操纵网络的输出,并在这个问题,他想节省整个训练有素的网络,以便后者可以再次使用 – 2014-09-02 17:14:49