Есть нейронная сеть в несколько слоев. Слои пронумерованы от 0 до layersCount. Нейроны в сети пронумерованы от 0 до neuronsCount. Т.е. к примеру у нас есть сеть из трех слоев и с шестью нейронами - 3 в первом, 1 во втором, 2 в третьем. Тогда слой под номером 0 содержит нейроны 0, 1 и 2, слой 1 нейрон 3 и слой 2 нейроны 4 и 5. Возможно ли наиболее быстро и с наименьшими затратами памяти определить номер слоя по номеру нейрона? Возможно вывести формулу? Сейчас у меня есть вспомогательный массив, содержащий количество нейронов в предыдущих слоях (т.е. для данного примера это будет [0, 3, 4]) и я перебираю его в цикле. Но это явно не самое оптимальное решение. задан 5 Ноя '12 14:25 Robotex |
Можно хранить не количество нейронов в каждом слое, а суммы этих количеств от первого слоя до текущего, т.е. организовать вспомогательный массив $%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)
Андрей Юрьевич
|
$$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 nikolaykruzh... |