Мне нужно обучить сеть, а затем поочередно снабжать ее данными испытаний. Есть ли какой-нибудь пример или документ, включающий его?
Для этого я сериализовал обученную сеть и использую ее при каждой новой входящей записи.
Проблема в том, что у меня произошел сбой от _convertToOneOfMany
, и даже если я понимаю его назначение (с здесь ), я не понимаю, как именно он работает.
Его поведение не является для меня детерминированным. Он должен как-то интерпретировать классы и метки, и должно быть какое-то требование, которое я пропускаю Это работает для всего набора данных, однако, если я выберу случайную строку, это сойдет с ума.
Traceback (most recent call last):
File "ffn_iris.py", line 29, in <module>
tstdata._convertToOneOfMany()
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/PyBrain-0.3-py2.6.egg/pybrain/datasets/classification.py", line 142, in _convertToOneOfMany
newtarg[i, int(oldtarg[i])] = bounds[1]
IndexError: index (2) out of range (0<=index<1) in dimension 1
EDIT:
чтобы быть более точным, позвольте мне рассказать вам, что я делаю: я хочу обучить сеть для самого известного примера NN в Интернете;) - Iris Dataset.
Это что-то вроде этого:
5.1,3.5,1.4,0.2,0
4.9,3.0,1.4,0.2,0
4.7,3.2,1.3,0.2,0
4.6,3.1,1.5,0.2,0
etc...
Последний ноль это класс. Весь набор данных содержит 60 строк. 20 для 0, 20 для 1 и 20 для 2.
Я читаю файл с данными и создаю набор данных:
alldata = ClassificationDataSet(4, class_labels=['Iris-setosa',
'Iris-versicolor',
'Iris-virginica'])
--- loop here ---
alldata.addSample(line[0:4], line[4])
--- create testing and training sets ---
tstdata, trndata = alldata.splitWithProportion(0.7)
--- converted matrixes ---
trndata._convertToOneOfMany()
tstdata._convertToOneOfMany()
--- not important, just for completeness ----
fnn = buildNetwork(trndata.indim, 10, trndata.outdim, outclass=SoftmaxLayer)
trainer = BackpropTrainer(fnn, dataset=trndata,
momentum=0.01, verbose=True,
weightdecay=0.01)
Моя проблема связана с _convertToOneOfMany()
. Когда набор данных или файл данных содержит только пару записей (не 60, разделенных на три класса), происходит сбой за исключением начала вопроса.
Пример сбоя набора данных:
6.5,3.0,5.2,2.0,1
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,2
6.5,3.0,5.2,2.0,0
Пример рабочего:
6.5,3.0,5.2,2.0,1
6.2,3.4,5.4,2.3,2
6.5,3.0,5.2,2.0,0
Как можно связать convertToOneOfMany()
с количеством записей в наборе данных или размером одного подмножества класса? Сбой записи в одной строке ..