Реализуйте общие сверточные слои с keras tensorflow

У меня есть сеть, которая имеет структуру, подобную сети. Я хотел бы сделать сверточные слои общими для двух входов. Пример моего кода:

conv_layer = Conv(parameters)
out1 = con_layer(input1)
out2 = con_layer(input2)

Создает ли эта часть два выхода, каждый из которых зависит только от соответствующего ввода и общих весов? Или он объединяет входы и передает их из свертки? Одинаковы ли веса в двух вызовах этого слоя? И еще вопрос по обучению. Когда дело доходит до обратного распространения, потери распространяются один раз из общих слоев? Есть ли изменения в обучении?


person Theo Vag    schedule 22.04.2020    source источник


Ответы (1)


Во-первых, в U-Net нет общего уровня. Он использует пропуск соединений и конкатенацию для повторного использования функций.

Общий слой выглядит примерно так

x --> F(x)
          ==> G(F(x),F(y))
y --> F(y) 

Эта часть создает два выхода, каждый из которых зависит только от соответствующего ввода и общих весов?

  • Да, общий вес фиксирован для обоих входов, и результат зависит от каждого входа.

Объединяет ли он входные данные и передает ли их из свертки?

  • Нет, он не выполняет никакой конкатенации. Даже два входа полностью независимы и не взаимодействуют напрямую — они проходят только через conv_layer.

Вес одинаковый?

  • Да, веса общего слоя точно такие же.

Что касается обратного распространения, потери распространяются один раз из общих слоев? Есть ли какие-либо изменения в обучении?

  • Не уверен, что вы имеете в виду, но веса будут обновлены для обоих входов, но одновременно. Если под изменением в обучении вы подразумеваете относительно неразделяемого слоя, то да.

Полезное чтение: http://neural.vision/blog/deep-learning/backpropagation-with-shared-weights/

https://datascience.stackexchange.com/questions/26755/cnn-how-does-backpropagation-with-weight-sharing-work-exactly

https://datascience.stackexchange.com/questions/27506/back-propagation-in-cnn< /а>

person Zabir Al Nazi    schedule 22.04.2020
comment
О последнем вопросе. Есть ли какая-либо ссылка, указывающая, как keras использует множественный вывод и потери при обратном распространении и коррекции весов? У меня есть одна общая часть, а затем две не общие части для многозадачности. Как влияет потеря = вес1*потеря1 + вес2*потеря2 на корректировку весов как в двух разделяемых, так и в общей части? Используется ли loss1 только при обновлении весов общей части 1 и общего? - person Theo Vag; 26.04.2020