ildarin
@ildarin

Как сделать нейросетку для генетического 2D алгоритма?

На экране есть от 2ух до N объектов 2D с x,y. У одного из них - "внутри" нейросетка с (например) 10 входными нейронами и 2мя выходными (угол и скорость движения). Отсеиваются приспособленные к задаче (например, убежать от других объектов или догнать).
Как подать значения x,y неизвестного заранее количества объектов N на 10 входных?
64d9dee136775482979294.png
Детали вопроса

В общем сабж - есть неизвестное N количество объектов на 2D плоскости, у объектов есть x,y. Нужно подать данные об объектах на вход нейросети (допустим, фидфорвард). Сами данные ок, нормализовали, однако как поступить с неизвестным количество N? Вижу несколько вариантов, но чот они какие-то стремные... Варианты:
1. padding, делаем Max входных, забиваем пустые нулями.
2. Собираем данные в некий фиксированный усредненный вектор (теряем детали входных значений). Снижение размерности.
3. Лучами. По принципу глаз - есть "глаза" - лучи, M штук, при пересечении подаем на вход параметры пересекшего.
4. Квадратами - делим плоскость на квадраты, попавших в квадрат - усредняем по значениям или типа того.
5. Разбивка по времени. Но я тут чот не совсем догнал, чел пишет чото про Tensorflow Timedistributed Wrapper.
  • Вопрос задан
  • 106 просмотров
Решения вопроса 1
@imageman
Рекуррентные сети
https://qudata.com/ml/ru/NN_RNN_Torch.html - довольно сносное описание.
Объясню "на пальцах":
а) на вход нейросети подаются N блоков (фиксированной длинны), к примеру для N ботов это будут координаты x,y поэтому у нас будет вектор [N , 2]
б) у нас есть некое внутреннее состояние нейросети (почти всегда инициализируется нолями) которое задается всегда определенным образом перед каждым запуском. Это массив длинной K (например 10). *** В твоем случае в самом начале в этот массив можно записать свои собственные координаты, какие-то дополнительные параметры (например число ботов).
в) сеть состоит из двух частей - рекуррентная (перебирает по очереди вход) и финальная часть, которая на основе внутреннего состояния дает окончательный вывод (прогноз, результат).

Теперь чуть подробнее. Рекуррентная часть это простая нейросеть любой конфигурации, которая на вход принимает массив "внутреннее состояние нейросети" и одну из N строк входного массива (в твоем случае "внутреннее состояние нейросети" + 2 числа). Обрабатывает это и на выходе получается новый массив "внутреннее состояние нейросети". Т.е. (как пример) на входе 12 чисел, на выходе 10 чисел.

После обработки всех N строк входного массива в дело вступает финальная часть нейросети. Она может быть тоже любой конфигурации (структуры). На вход принимает "внутреннее состояние нейросети" (например 10 чисел), на выходе какой-то уже конечный результат (к примеру "угол" и "скорость").

Надеюсь понятно изложил.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы