【发布时间】:2019-03-27 14:15:45
【问题描述】:
我为我的 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 参数的不同组合,但似乎没有任何帮助。感谢您的帮助!
【问题讨论】:
-
现在似乎可以工作了。我没有在 get_config 函数中返回实际配置,而是返回空大括号。不知道在进行预测时它是否会损害模型的行为,但目前这对我来说并不重要。如果有人想解释,我仍然会很高兴!