Получить слой из графика, TensorFlow / Keras - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь получить доступ к атрибутам слоя из оптимизатора модели; Я предполагаю, что один из способов сделать это - через График, который доступен, например, с помощью K.get_session() (Keras / tf.Keras). Однако я нахожу только операции и тензоры, использующие .get_operations() или ._nodes_by_name, а не сами экземпляры слоев. Можно ли получить доступ к слоям через график по умолчанию (или другой)?


Пример : выборка recurrent_regularizer слоя LSTM без доступа к model (кроме model.optimizer ):

from keras.layers import Input, LSTM
from keras.models import Model
from keras.regularizers import l2

ipt = Input(shape=(120, 4))
out = LSTM(60, recurrent_regularizer=l2(1e-4), name='lstm_1')(ipt)
model = Model(ipt, out)
model.compile('adam', loss='mse')
>> print(vars(model.layers[1].cell.recurrent_regularizer))
{'l1': array(0., dtype=float32), 'l2': array(1.e-04, dtype=float32)}

Контекст : Моя реализация AdamW позволяет указывать, какие веса затухать, с помощью словаря из имена слоев / веса + список значений; это плохо масштабируется для очень больших или сложных сетей. Для него удобнее работать как «вставка» - как обычно, только определяя затухания в конструкторах слоев. Однако эта информация хранится в layer._losses или, например, layer.kernel_regularizer, а не в weights или updates, поэтому к ней нельзя получить доступ в (из атрибутов).

Оптимизатор Таким образом, автоматически будут определены wd, и ноль все штрафы на основе потерь (l2, et c).


Обновление : проблема «контекста» решается через оболочку. Теперь вопрос только о вопросе; что описывается как «возможно» не слишком хаки sh образом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...