Как нормализовать выход сети Keras в задаче регрессии, требующей вывода с нормой L2 блока? - PullRequest
0 голосов
/ 23 ноября 2018

Моя проблема регрессии требует, чтобы сетевой выход y имел единичную норму ||y|| = 1..Я хотел бы наложить это как Lambda слой после линейной активации:

from keras import backend as K  
...  
model.add(Dense(numOutputs, activation='linear'))  
model.add(Lambda(lambda x: K.l2_normalize(x)))  

Бэкэнд - TensorFlow.Код компилируется, но сеть прогнозирует выходные векторы с различными нормами (норма не 1 и меняется).

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

1 Ответ

0 голосов
/ 23 ноября 2018

Проблема в том, что вы не передали аргумент axis в функцию K.l2_normalize.В результате он нормализует все элементы во всей партии так, чтобы их норма была равна единице.Чтобы решить эту проблему, просто введите axis=-1 для нормализации по последней оси:

model.add(Lambda(lambda x: K.l2_normalize(x, axis=-1)))  
...