2017-01-22 20 views
3

Я написал программу для тренировки своей сети с использованием 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) 

Благодаря

+3

Как @Chase Roberts ответил, что я использовал [http://stackoverflow.com/questions/8150772/pybrain-how-to-print-a-network-nodes-and-weights]. Число ** in_to_hiddens ** в моей сети составляет 5200 (слишком много), это написано так: in_to_hidden [1.55300577 -0.62533809 -0.08147982 ..., 1.29706926 0.50138988] Но мне НУЖНО РЕАЛЬНЫЕ ВЕСЫ, а не ** НЕКОТОРЫЕ DOTS **. Может ли кто-нибудь помочь? –

ответ

0

Наконец я использовал этот ответ [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(']') 

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