Здравствуйте. Вопрос следующий: Есть нейросеть (но это не столь важно). Нужно после вычисления значений в текущем слое проводить вычисления в следующем.
Вопрос как передать результаты вычислений для предыдущего слоя в текущий. Есть две версии:
fLinks: array of array of Single;
// или
fLinks: array of array of PSingle;
Оба имеют свои недостатки: первый подход: по итогам вычисления первого слоя нужно заполнить массивы входов второго слоя полученными данными. второй подход: переадресация (схема "адрес->адрес->данные" вместо "адрес->данные"). Но у второго подхода плюс в гибкости. Вопрос собственно: сколько тормозов у заполнения массивов по сравнению с переадресацией?
Или можно еще как-то это дело передавать?..
Поможите людi добрi

... << RSDN@Home 1.1.3 stable >>
Здравствуйте, nayato, Вы писали:
N>Здравствуйте. Вопрос следующий: Есть нейросеть (но это не столь важно). Нужно после вычисления значений в текущем слое проводить вычисления в следующем.
Тут зависит от того как у вас организованна сама сеть.
Для меня например структура видится следующим образом. Список слоев. Для каждого слоя сети имеется список нейронов. У каждого нейрона список нейронов из предыдущего слоя выходные значения которых соединены с его входом. Тогда при вычислении на i слое нейрон сам забирает данные которые ему нужны из нейронов i-1 слоя. Зачем вообще нужны промежуточные массивы мне непонятно.
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
N>>Здравствуйте. Вопрос следующий: Есть нейросеть (но это не столь важно). Нужно после вычисления значений в текущем слое проводить вычисления в следующем.
LF>Тут зависит от того как у вас организованна сама сеть.
LF>Для меня например структура видится следующим образом. Список слоев. Для каждого слоя сети имеется список нейронов. У каждого нейрона список нейронов из предыдущего слоя выходные значения которых соединены с его входом. Тогда при вычислении на i слое нейрон сам забирает данные которые ему нужны из нейронов i-1 слоя. Зачем вообще нужны промежуточные массивы мне непонятно.
Неее... нейрон-объект — нерационально!
Я вижу так: слой как основной (центральный так сказать) класс, реализующий принципы сети:
1) является элементарным классом (нет нейрону объекту!

)
2) активация поведения через события от предыдущего слоя (в случае первого — от сенсорного). Таким образом реализую реорганизацию сети при изменении числа нейронов в некотором слое, распространение вычислительного процесса, pruning, BP...
Сеть при этом становится сервисным таким объектом — регулирование структуры слоев, их инициализация, модификация, интерфейс статистики, формирование ОВ, ТВ, инициация вычислений и т.п.
Кстати у меня в связи с таким подходом вопрос один, а в новый топик не охота...
При инициализации очередного слоя (при определении связей с предыдущим) нужно получить массив указателей (с этим уже определился) на выходы слоя. По выбранной архитектуре получается, что это необходимо сделать при возникновении события реорганизации, инициированного этим самым предыдущим слоем. Вроде:
TLayer.setNeuronCount(...);
begin
...
if assigned(fOnReorganize) then
fOnReorganize(???);
end;
Вместо вопросиков можно поставить внутреннее (private) поле-массив указателей на выходы либо же у TLayer организовать интерфейс для получения таких указателей (в protected) и вместо вопросиков передавать самого себя любимого.
Первый подход будет быстрее, но вопрос:
будет ли его использованием нарушением принципов ООП? Второй-то подход очевидно обеспечивает целостность и "внутреннесть" своих данных, а первый не очень как-то...