как кормить pybrain ffn с одной записи (в уже обученную сеть)? - PullRequest
5 голосов
/ 29 ноября 2011

Мне нужно обучить сеть, а затем поочередно снабжать ее данными испытаний. Есть ли какой-нибудь пример или документ, включающий его?

Для этого я сериализовал обученную сеть и использую ее при каждой новой входящей записи. Проблема в том, что у меня произошел сбой от _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() с количеством записей в наборе данных или размером одного подмножества класса? Сбой записи в одной строке ..

1 Ответ

0 голосов
/ 03 декабря 2011

Это может быть хорошо, если вы вставите больше кода. По поводу вашего вопроса, это по их документации: http://pybrain.org/docs/quickstart/network.html В основном это команда: net.activate ([2, 1]) в этом случае сеть имеет 2 входа, и он / она вводит значения 2 и 1 Я рекомендую вам просмотреть их документацию

...