Возможно ли иметь не обучаемый слой в Керасе?

Я хотел бы рассчитать постоянную свертку, такую ​​как размытие или пересэмплирование, и хочу, чтобы она никогда не меняла тренировки во время тренировки.

Можно ли инициализировать ядро ​​свертки постоянным и исключить его из обучения в Керасе?

ОБНОВИТЬ

Я не хочу использовать это в целях, заявленных в документе. Я хочу реализовать остаточную сеть следующим образом: одна ветвь выполняет обычную обучаемую свертку, в то время как параллельная ветвь делает что-то постоянное, например, усреднение.

1 ответ

Решение

Вы должны быть в состоянии передать trainable = False аргумент вашего определения слоя, или установите layer.trainable = False свойство после создания вашего слоя. В последнем случае нужно скомпилировать по факту. Смотрите FAQ здесь.

Затем вы можете установить постоянные веса для слоя, передав kernel_initializer = initializer аргумент. Более подробную информацию об инициализаторах можно найти здесь. Если у вас где-то уже определена матрица весов, я думаю, вам нужно будет определить пользовательский инициализатор, который устанавливает весовые значения для ваших желаемых значений. Ссылка показывает, как определить пользовательские инициализаторы в нижней части.

Тем не менее, я не подтвердил, и когда я сделал поиск в Google, я увидел много сообщений об ошибках, всплывающих о том, что замораживание слоев не работает должным образом. Хотя стоит попробовать.

Другие вопросы по тегам