Я создал пользовательское ограничение для своего keras GRU-NN и смог обучить свою сеть с ним.Ограничение выглядит следующим образом:
import keras.backend as K
from keras.constraints import Constraint
class WeightClip(Constraint):
def __init__(self, mn=0.1, mx=1.0):
self.mn = mn
self.mx = mx
def __call__(self, p):
return K.clip(p, self.mn, self.mx)
def get_config(self):
return {'name': self.__class__.__name__,
'minimum': self.mn, 'maximum': self.mx}
После сохранения модели и попытки перезагрузить ее с помощью
model = keras.models.load_model(modelFile, custom_objects={'WeightClip': WeightClip})
я получил это сообщение об ошибке:
TypeError: __init__() got an unexpected keyword argument 'name'
Сама модель выглядит следующим образом:
model = Sequential()
model.add(GRU(
params.recurrent_units, activation='linear',
input_shape=(pr.n_features, pr.feature_size), dropout=params.dropout, name='net',
kernel_constraint=WeightClip(0.1, 1.0),
bias_constraint=WeightClip(0.1, 1.0)
))
model.add(Dense(1, activation='sigmoid', kernel_constraint=WeightClip(0.1, 1.0),
bias_constraint=WeightClip(0.1, 1.0)))
Обращаясь к другим подобным вопросам по stackoverflow, которые в большинстве случаев связаны с пользовательскими метриками, я пробовал различные комбинации параметра custom_objects, но, похоже, ничего не помогло.Спасибо за любую помощь!