Как использовать CNN, если один из каналов — входные данные, а другой — выходные?
Допустим, у меня есть датасет. Входные данные состоят из двух массивов, один из которых определяет орошаемые полигоны. Другой имеет ту же структуру, но называется "препятствия" и описывает полигоны, которые не являются зоной орошения, но влияют на расположение дождевателей.
Наконец, выходные данные представляют собой массив дождевателей с их выходными координатами. Задачей, соответственно является скормить датасет нейронке, чтобы она нашла взаимосвязи между расположением полигонов и количеством/расположением дождевателей, чтобы в дальнейшем предсказывать расположение дождевателей на любых других полигонах.
Поскольку эти данные нельзя представить в виде массива или графа (в них может быть любое количество полигонов и любое количество дождевателей, что делает их очень неэффективными после предварительной обработки данных), я думаю об использовании сверточных нейронных сетей, но немного нетривиальным способом. Я хочу представить данные в каналах (слоях) CNN, где первый канал будет содержать только данные об орошаемых полигонах, второй - о препятствиях, а третий, соответственно, о дождевателях. Мои вопросы таковы:
1) Возможно ли это вообще? Я новичок в нейронных сетях, и мне интересно, стоит ли использовать CNN для чего-либо, кроме работы с изображениями? Если не CNN, то что бы вы использовали здесь?
2) Если да, то возможно ли впоследствии, когда модель будет обучена, предсказывать только данные выходного канала с дождевателями, подавая только данные входных каналов (полигонов орошения и препятствий) для создания предсказания?
Я пытался сделать эту нейронную сеть, используя графы и простой подход ANN через пэддинг, нормализацию и флэттенинг. Однако, в результате количество параметров стало слишком большим, поскольку некоторые полигоны можно описать 8 числами (4 точками), а некоторые гораздо сложнее. Количество как полигонов, так и дождевателей также может сильно различаться, что делает данные очень неоднородными и не едиными в своём представлении.
Для данных с сильно разным размером обычно используют рекуррентые нейронные сети. В этом случае каждую сущность (полигон) подают по очереди. А в сверточные сети подают все сразу, но в виде двумерной карты/картинки (или нескольких), в которой каждый пиксель чем-то заполнен, т.е. просто набор полигонов не подходит, надо его на координатную плоскость положить. Но в любом случае надо начать с постановки задачи и формализации входных и выходных данных. Из этого потока сознания можно сделать вывод, что вроде речь идет об оптимальном размещении поливалок, - в таких случаях обычно начинают не с нейронок, а если доходят до неройнок, то почти всегда приходится существенно преобразовывать имеющиеся данные и временами даже вручную дорабатывать функцию потерь.
kamenyuga, да, задача заключается именно в этом. Решение через нейронку это личное желание, т.к. задача и правда вполне решается алгоритмически, но хочется именно создать и обучить нейросеть. К тому же датасет уже в процессе наполнения.
Спасибо за ответ, в таком случае буду вникать дальше уже в RNN. Насколько вообще тяжело выполнимой можно назвать такую задачу?
Rektalizer, такую задачу можно хотя бы попробовать решить. Первая большая сложность в том, что надо рассказать нейронке про взаимное положение полигонов. Очевидный вариант - двумерная карта/картинка и свертки. Тут сразу куча деталей про размер, масштаб и способ кодирования инофрмации. С рекуррентными нейронками будет еще сложнее. Вторая большая сложность - таргет. Наверное, стоит за раз предсказывать положение только одной поливалки - изначально их нет, а потом они по одной добавляются в подходящее место, пока польза от них еще есть. Тут-то возникает третья умеренная сложность - функция потерь . По дефолту это ж будет просто расстояние, на которое нейронка ошиблась (не забыть про масштаб из первой сложности), а возможно надо сразу реализовать типа человечью логику выбора места (особенно если данных мало). Ну, вот и все - решаем три сложные проблемы, обучаем, тестируем, победа.
Если я правильно понял задачу, то для начала для решения использовал бы автоэнконер или u-net (в общем сети генерации изображений). На вход подаем каналы с известными данными (рельеф, препятствия, сегментированные площади орошения) - выход обучать схеме расположения дождевателей. Для обучения необходимы пары - изображения без дождевателей, и с дождевателями (или слой только с дождевателями). Понятно, что проще обучить на получение слоя только с дождевателями.
Здравствуйте! Звучит как подходящее решение, но возникает вопрос. То есть, это значит, что я могу разделить свои данные на каналы (входные и выходные), а затем после обучения подавать на вход только данные входного канала и получать предсказание в виде выходного канала (расположения дождевателей)?