Я пытаюсь получить доступ к атрибутам слоя из оптимизатора модели; Я предполагаю, что один из способов сделать это - через График, который доступен, например, с помощью 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 образом?