Есть нейронная сеть в несколько слоев. Слои пронумерованы от 0 до layersCount. Нейроны в сети пронумерованы от 0 до neuronsCount. Т.е. к примеру у нас есть сеть из трех слоев и с шестью нейронами - 3 в первом, 1 во втором, 2 в третьем. Тогда слой под номером 0 содержит нейроны 0, 1 и 2, слой 1 нейрон 3 и слой 2 нейроны 4 и 5.

Возможно ли наиболее быстро и с наименьшими затратами памяти определить номер слоя по номеру нейрона? Возможно вывести формулу?

Сейчас у меня есть вспомогательный массив, содержащий количество нейронов в предыдущих слоях (т.е. для данного примера это будет [0, 3, 4]) и я перебираю его в цикле. Но это явно не самое оптимальное решение.

задан 5 Ноя '12 14:25

изменен 5 Ноя '12 15:07

DocentI's gravatar image


9.8k938

10|600 символов нужно символов осталось
1

Можно хранить не количество нейронов в каждом слое, а суммы этих количеств от первого слоя до текущего, т.е. организовать вспомогательный массив $%S$%, первый элемент которого - количество нейронов в первом слое, второй - сумма количеств в первом и во втором слоях, третий - сумма количеств в первом, втором и третьем, и т.д. Тогда достаточно будет последовательно сравнивать $%n$% со значениями $%S_i$%. Как только $%S_i \lt n \le S_{i+1}$%, значит номер слоя равен $%i$%.

Можно сократить количество сравнений, применив процедуру "деления номера пополам", т.е. сначала взять $%i=layersCount$%, потом $%layersCount/2$%, потом, в зависимости от результата, либо $%layersCount/4$%, либо $%3 \cdot layersCount/4$% и т.д. - это даст экспоненциальную сходимость алгоритма, но это будет иметь смысл только для очень больших значений $%layersCount$%.

ссылка

отвечен 5 Ноя '12 21:05

Именно так и делаю. Однако, может быть есть более быстрый способ?

(5 Ноя '12 21:17) Robotex

Ну, это вряд ли. Так или иначе, при определении номера слоя Вам придется учитывать и обрабатывать информацию о количестве нейронов в слоях. Сейчас у Вас эта обработка включает $%log_2(layersCount)$% чисто логических операций. По-моему, меньше уж некуда.

(5 Ноя '12 21:23) Андрей Юрьевич

Это с делением пополам? Или простым перебором?

(5 Ноя '12 21:57) Robotex

с делением пополам

(6 Ноя '12 0:20) Андрей Юрьевич
10|600 символов нужно символов осталось
0

$$0_1;1_1;2_1... i_1$$ $$1_2; 2_2; 3_2... k_2$$ $$2_3; 3_3; 4_3... l_3$$ $$.........................$$ $$(n - 1)_n; n_n; (n + 1)_n;... s_n$$ Надо иметь программу, по которой оптимум находится автоматически, при минимальном участии человека.

ссылка

отвечен 5 Ноя '12 21:13

изменен 5 Ноя '12 23:28

%D0%A5%D1%8D%D1%88%D0%9A%D0%BE%D0%B4's gravatar image


5525

10|600 символов нужно символов осталось
0

Организуйте поиск нужного нейрона в двумерном массиве, элементы которого номера нейронов. Если на каком-то месте нет нейрона, то считайте значение этого элемента равным 0. Или я что-то не так понял?

ссылка

отвечен 5 Ноя '12 21:31

10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×2,611
×124
×5

задан
5 Ноя '12 14:25

показан
951 раз

обновлен
6 Ноя '12 0:20

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru