Есть ли способ написать окончательные веса (после всех завершенных эпох), используя 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)
Спасибо
1 ответ
Наконец, я использовал этот ответ [ pybrain: как напечатать сеть (узлы и веса), чтобы все они были записаны:
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(']')
Таким образом, я записал веса (все они не некоторые из них) в списке, и поскольку количество весов слишком велико, в этой программе каждые семь весов записываются в строке.