python-2.7 - 有什么方法可以使用 pybrain 编写最终权重(在所有时期完成后)?

标签 python-2.7 neural-network pybrain precision-recall

我已经编写了一个程序来使用 pybrain 训练我的网络。我在训练文件的每一行中有 104 个输入和 7 个输出。我创建了一个长度为 50 的隐藏层。网络是用 .xml 文件编写的。但我不知道如何将最终的权重和偏差写入一个文件,以便我可以计算精度和召回率。有人可以帮忙吗?

from pybrain.datasets import SupervisedDataSet
from pybrain.datasets            import ClassificationDataSet
from pybrain.utilities           import percentError
from pybrain.tools.shortcuts     import buildNetwork
from pybrain.supervised.trainers import BackpropTrainer
from pybrain.structure.modules   import SoftmaxLayer
from pybrain.tools.xml.networkwriter import NetworkWriter
from pybrain.tools.xml.networkreader import NetworkReader

ds = SupervisedDataSet(104,7)

tf = open('neural_net_feature.txt','r')
for line in tf.readlines():
    data = [float(x) for x in line.strip().split(',') if x != '']
    indata =  tuple(data[:104])
    outdata = tuple(data[104:])
    ds.addSample(indata,outdata)
n=buildNetwork(ds.indim,50,ds.outdim,hiddenclass=SigmoidLayer,outclass=SigmoidLayer)
NetworkWriter.writeToFile(n, 'filename.xml')
n = NetworkReader.readFrom('filename.xml')
t = BackpropTrainer(n,learningrate=0.01,momentum=0.5,verbose=True)
t.trainUntilConvergence(dataset=ds, maxEpochs=None, verbose=False  ,          continueEpochs=10, validationProportion=0.10)
t.testOnData(verbose=True)

谢谢

最佳答案

最后我使用了这个答案[ pybrain: how to print a network (nodes and weights)把它们全部写下来:

i=0
for mod in n.modules:
    #n.modules:
    #set([<BiasUnit 'bias'>, <LinearLayer 'in'>, <SigmoidLayer 'hidden0'>,
    #<SigmoidLayer 'out'>])
    for conn in n.connections[mod]:
        #n.connections:
        #{<BiasUnit 'bias'>: [<FullConnection 'FullConnection-4': 'bias' -> 'out'>,<FullConnection 'FullConnection-5': 'bias' -> 'hidden0'>],
        #<LinearLayer 'in'>: [<FullConnection 'FullConnection-6': 'in' -> 'hidden0'>],
        #<SigmoidLayer 'hidden0'>: [<FullConnection 'FullConnection-7': 'hidden0' -> 'out'>],
        #<SigmoidLayer 'out'>: []}
        final_weight.write('\n'+"connection:"+str(conn)+'\n')
        final_weight.write('[')
        if i<7:
        for cc in range(len(conn.params)):
            final_weight.write(str(conn.params[cc])+',')
            i+=1
            if i==7:
            final_weight.write('\n')
            i=0
            final_weight.write(']')

这样我就把权值(不是全部而不是部分)写在了一个列表中,由于权值的数量太多,所以在这个程序中每7个权值写在一行。

关于python-2.7 - 有什么方法可以使用 pybrain 编写最终权重(在所有时期完成后)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788443/

相关文章:

Python - 所有循环中的 `break`

python - 查找包含特定文本的 HTML 标记

machine-learning - XOR 循环神经网络的序列训练数据

python - Keras:可重现结果 CPU 上的简单 MLP

python - 如何格式化深度信念神经网络的训练/测试集

python - 附加带有整数的列表

python - 从 unicode 字符串中删除选定的标点符号

python - PyBrain 的遗传算法示例/教程?

machine-learning - 用机器学习来理解 Python 中的网站结构

python - 使用 Pybrain 进行序列模式识别