Могу ли я написать слой Keras Lambda с неизменяемыми / фиксированными весами?

https://keras.io/layers/writing-your-own-keras-layers/

Согласно здесь, клиентские операции без сохранения состояния могут быть обернуты в слои Lambda. Но если есть обучаемые переменные, нам нужно реализовать наш собственный уровень. Я хочу спросить, можно ли использовать слой лямбда для фиксированных весов (то есть предварительно обученных весов)?

Если да, как убедиться, что веса правильно загружены, а не инициализированы случайным образом? Поскольку get_weights () не дает вам веса в слое Lambda.

Большое спасибо заранее.


person Kai Huang    schedule 13.06.2019    source источник


Ответы (2)


Нет, слои Lambda не имеют весов со стороны Keras, вы можете поместить некоторые веса внутри своей лямбда-функции, но эти веса не могут быть загружены с помощью Keras и полностью невидимы для Keras.

Поэтому, если вы хотите использовать предварительно обученные веса, вы должны реализовать свой собственный слой, чтобы эти веса были известны Keras и могли быть загружены с помощью load_weights.

person Dr. Snoopy    schedule 13.06.2019
comment
Привет, спасибо за быстрый ответ. Хотите знать, могу ли я сначала загрузить контрольную точку тензорного потока в граф тензорного потока перед переносом в слой лямбда? Я пробовал этот способ, но, похоже, результат отличается от TF, что означает, что веса не загружены или все еще инициализируются случайным образом. - person Kai Huang; 14.06.2019

Предположим, вас интересует сверточный слой. Я думаю, что это можно сделать с model.add(Lambda(lambda x: K.conv2d(x, kernels)), где kernels - это numpy матрица с вашими весами, а K - это бэкэнд.

person jacenkow    schedule 13.06.2019