Почему нормализация L2 в слое керас расширяет тусклость? - PullRequest
1 голос
/ 28 апреля 2020

Я хочу взять последний слой архитектуры Фа ceNet, который содержит 3 последних слоя:

Выпадение (Выпадение) (Нет, 1792)
Узкое место (Плотный) (Нет, 128)
Bottleneck_BatchNorm (BatchNorm (Нет, 128)

, и я хочу добавить дополнительный уровень нормализации L2, например:

norm = FRmodel.outputs
norm = Lambda(lambda x: K.l2_normalize(x, axis=1)), name="Normalization")(norm)

И теперь последние слои выглядят так:

Выпадение (выпадение) (нет, 1792)
Узкое место (плотное) (нет, 128)
Bottleneck_BatchNorm (BatchNorm (нет, 128)
Нормализация (Лямбда) (1, Нет, 128)

Мой вопрос: почему размеры нормализации L2 меняются с (None, 128) на (1, None, 128)? Из-за этого Я не могу обучить свою модель, потому что выходы не подходят. Если я пытаюсь обучить модель без добавления нормализации, все работает хорошо.

1 Ответ

2 голосов
/ 28 апреля 2020

Это происходит потому, что атрибут outputs модели Keras возвращает список выходных тензоров (даже если ваша модель имеет только один выходной слой). Поэтому созданный вами слой Lambda применяется к этому списку, а не к одному выходному тензору в нем. Чтобы решить эту проблему, извлеките первый элемент этого списка, а затем примените к нему слой Lambda:

norm = FRmodel.outputs[0]
norm = Lambda(...)(norm)
...