CNN с несколькими входами и несколькими выходами с пользовательской функцией потерь - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть набор двумерных входных массивов m x n, а именно A,B,C, и я должен предсказать два двумерных выходных массива, а именно d,e, для которых у меня есть ожидаемые значения.Вы можете думать о входах / выходах как о серых изображениях, если хотите.

Поскольку пространственная информация является релевантной (на самом деле это двумерные физические области), я хочу использовать сверточную нейронную сеть для прогнозирования d иe.Мой дизайн (еще не проверенный) выглядит следующим образом:

enter image description here

Поскольку у меня есть несколько входов, я думаю, что я должен использовать несколько столбцов (или ветвей) длянайти различные функции для каждого из входов (они выглядят довольно по-разному).Каждый из этих столбцов соответствует архитектуре кодирования-декодирования, используемой в сегментации (см. SegNet): блок Conv2D включает в себя свертку + пакетную нормализацию + уровень ReLU.Deconv2D включает в себя деконволюцию + пакетную нормализацию + ReLU.

Затем я могу объединить выходные данные каждого столбца путем конкатенации, усреднения или взятия максимума, например.Чтобы получить исходную форму m x n для каждого из выходов, которые я видел, я мог бы сделать это с помощью свертки ядра 1 x 1.

Я хочу предсказать два выхода из этого одного слоя.Это нормально с точки зрения структуры сети?Наконец, моя функция потерь зависит от самих результатов по сравнению с целью плюс другое отношение, которое я хочу навязать.

A хотел бы получить некоторое экспертное мнение по этому вопросу, так как это мой первый дизайн CNN, и я неконечно, если это имеет смысл, как сейчас, и / или если есть более подходящие подходы (или сетевые архитектуры) к этой проблеме.

Первоначально я опубликовал это в datascience , но я не получилмного отзывов.Сейчас я размещаю его здесь, так как по этим темам существует более широкое сообщество, и я был бы очень признателен за советы по реализации, помимо сетевых архитектурных.Спасибо.

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Это действительно широкий вопрос, требующий ответов, основанных главным образом на мнениях.Вот мои два цента, которые вам могут показаться интересными, поскольку они не соответствуют предыдущим ответам здесь и в отношении данных.

Во-первых, я бы не стал использовать отдельные столбцы для каждого ввода.AFAIK, когда разные входы обрабатываются разными столбцами, почти всегда случается, что сеть представляет собой какую-то сиамскую сеть, и столбцы имеют одинаковые веса;или, по крайней мере, все столбцы должны создавать похожий код.Это не ваш случай, поэтому я бы не стал беспокоиться.

Во-вторых, у вас возникла проблема с плотным выводом и , не нужно изучать код.Это должно направить вас прямо к U-сетям , который превосходит любую сеть с узкими местами без особых усилий.U-сети были введены для плотной сегментации, но они действительно помогают при любой проблеме плотного вывода.

Короче говоря, просто сложите свои входы вместе и используйте U-сеть.

0 голосов
/ 19 декабря 2018

Я думаю, что ваш дизайн в целом имеет смысл:

  • , поскольку A, B и C довольно разные, вы делаете каждый вход подсетью преобразования, а затем объединяете их вместе, который является вашим промежуточным представлением.

  • из промежуточного представления, вы применяете дополнительный CNN для декодирования D и E соответственно.

Несколько вещей:

  1. A, B и C, выглядящие по-разному, не обязательно означают, что вы не можете сложить их вместе как 3-канал ввода.Решение должно быть принято на основании того факта, что значения в A, B и C означают по-разному или нет.Например, если A является изображением серой шкалы, B является картой глубины, C также является серым изображением, полученным другой камерой.Тогда A и B лучше обрабатываются предложенным вами способом, но A и C могут быть объединены в один вход перед подачей его в вашу сеть.

  2. D и E - два выходасеть и будет обучаться в многозадачной манере.Конечно, они должны иметь некоторую скрытую функцию, и нужно разделить эту функцию, чтобы применить нисходящую ветвь с общим весом для каждого выхода.Тем не менее, где разделить, как правило, сложно.

...