2015-04-15 3 views
1

Во всех примерах, кажется, что addSample (вход, мишень) используется с 1 одномерных массивов, таких как:PyBrain addSample многомерный массив

INPUT = 5 
OUTPUT = 1 

input = [5, 5, 5, 5, 5] 
target = [1] 

ds = SequentialDataSet(5, 1) 
#add data using addSample 

Как можно сделать это, когда вход мульти -мерным таким образом:

input = [[5, 5, 5, 5, 5], [5, 5, 5, 5, 5]] 
target = [1] 

Как использовать addSample с такими структурами? Я попытался это:

ds = SequentialDataSet(2, 1) 
ds.addSample(input, target) 

и получить сообщение об ошибке:

Could not broadcast input array from shape (2, 5) into shape 2. 

означая SequentialDataSet (2, 1) не работает для этой структуры, но SequentialDataSet ((2, 5), 1) также ошибки. Это должно быть легко, но я не могу найти ответ.

ответ

2

Это выглядит, как будто вы пытаетесь обучить какую-то сеть Feed Forward, возможно, многослойный персептрон? 5 слоев, один или несколько скрытых слоев и один выходной слой, но это не ясно, так что это скачок на моем конце.

В любом случае ваш входной слой должен быть единственным массивом. Если у вас есть структура или многомерный массив, вам нужно свернуть его и подавать в виде единого набора данных. Таким образом, для вашего предложения 5x2 у вас просто будет 10 элементов на входе, и вы будете нести ответственность за «разбор» ваших входных структур последовательно, поскольку они будут переданы в сеть. Для структуры 5x5 у вас должно быть 25 входов и т. Д.

По моему опыту большая часть успеха/задачи с помощью ANN структурирует данные так, что форма ввода нормализуется и отображается таким образом, что сеть может математически найти шаблон с.

+0

Так что мне нужно, чтобы изменить 5x2 в массив 10x1 , не так ли странно, что он не может взять массив 5x2, результаты должны отличаться от 5x2 по сравнению с правилом 10x1? Спасибо за ответ. – shell

0

Согласно сообщению, связанной под вами следует просто ввести один массив:

Pybrain multi dimensional data input

Для SequentialDataSet Я использовал этот пример:

data = [(1,2), (1,3), (10,2), (2,0), (2,9), (4,3), (1,2), (10,5)] 
ds = SequentialDataSet(2,2) 
for sample, next_sample in zip(data, cycle(test_data[1:])): 
    ds.addSample(sample, next_sample) 
Смежные вопросы