Есть ли способ написать окончательные веса (после того, как все эпохи закончились), используя pybrain?

Я написал программу для обучения моей сети с помощью 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)

Спасибо


person m.khodakarami    schedule 22.01.2017    source источник
comment
Как ответил @Chase Roberts, я использовал [stackoverflow.com/questions/8150772/. Количество in_to_hiddens в моей сети 5200(слишком много), пишется так: in_to_hidden [ 1.55300577 -0.62533809 -0.08147982 ..., 1.29706926 0.50138988 ] Но МНЕ НУЖНЫ РЕАЛЬНЫЕ ВЕСЫ не НЕСКОЛЬКО ТОЧЕК. Кто-нибудь может помочь плз??   -  person m.khodakarami    schedule 08.04.2017


Ответы (1)


Наконец, я использовал этот ответ распечатать сеть (узлы и веса), чтобы записать их все:

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

Таким образом, я записал веса (все, а не некоторые из них) в список, и, поскольку количество весов слишком велико, в этой программе каждые семь весов записываются в строку.

person m.khodakarami    schedule 08.05.2017