- Чтобы тренироваться только вы должны поставить обучаемый флаг на True в слое Embedding.Но он будет тренироваться с самого начала -
- Чтобы инициализировать матрицу, вы можете использовать ту, которую вы считаете, у вас есть пример здесь: https://www.kaggle.com/lystdo/lstm-with-word2vec-embeddings (где используются Google300Negatives, а также взяты только словачто они используются из исходной матрицы).Используйте параметр weights в классе конструктора Embedded (weights = [...]).Эта матрица должна иметь размер числа слов x количество измерений вложения.
В Keras любой слой, имеющий параметры, может быть обучаемым или нет.Этот флаг полезен, когда вы хотите обучить только подмножество слоев (только полностью подключенных и т. Д.), Чтобы избежать взрыва параметров.
Когда вы задаете trainable = true :
- Если слой находится в середине сети, это только распространяет входной градиент, но не корректирует вес.
- Если слой является первым в сети, это не распространяет какой-либо градиент.
В случае слоя внедрения вы можете инициализировать этот слой как матрицу внедрения по умолчанию (например, gensim Gooogle300Negative).
Когда вы активируете обучаемость в этом слое, вы даете карт-бланш для Кераса, чтобы он корректировался с учетом этого встраивания.Это также означает необходимость оптимизации многих других параметров.
В некоторых случаях нет интереса в изменении исходного встраивания, либо из-за связанных с этим затрат, либо из-за того, что оно должно быть сохранено.
РЕДАКТИРОВАТЬ: Эта задача соответствует Tensorflow внутри Керас.Но этот принцип не зависит от рамок, а только от теории.Когда вы определяете trainable = false, вы указываете, что веса не должны обновляться.
Это означает, что промежуточные слои должны рассчитывать градиент только относительно входных данных, потому что один из весов бесполезен (простоесли они вычислены, ничто не получено, и обучаемый флаг не будет существовать).Они рассчитывают относительно входа, потому что градиент должен продолжать распространяться.
Первый слой также имеет особенность, что входные данные являются вашими данными, и, следовательно, нет необходимости продолжать распространение, поэтому, если trainable = false, выне нужно ничего делать.
В Tensorflow флаг обучаемого добавляет или нет переменную в коллекцию GraphKeys.TRAINABLE_VARIABLES, таким образом, они учитываются или нет.https://www.tensorflow.org/api_docs/python/tf/trainable_variables