0

当我尝试保存 hyperopt.trials 对象时,其中包含有关神经网络中自动参数调整的信息,

best = fmin(fn = objective, 
            space = space, 
            algo = tpe.suggest, # or rand.suggest for random params selection 
            max_evals = max_trials, 
            trials = trials) #, rstate = np.random.RandomState(50)
pickle.dump(trials, open("neuro.hyperopt", "wb"))

它给出了错误:

不能腌制 _thread.RLock 对象

此外,它会在我的本地驱动器上加载一个 10GB 大小的文件。也就是说,它不仅保存了试验对象,还保存了整个模型。你能帮我保存更小的试验对象吗(例如 XGBoost 试验文件的大小是 1Mb)并避免错误。

谢谢你。

4

1 回答 1

0

就我而言,这是因为存储在试验中的模型不能腌制。我试图保存 tf.keras.optimizers.Adam(learning_rate = 0.001) 对象。当我改为添加字符串 'Adam' 时,错误消失了。

当然,它会产生另一个问题:如何为优化器设置学习率。但这似乎更容易。一种方法是在保存之前将 keras 对象替换为 trial.trials 对象中的字符串:

for trial in trials.trials:
    if 'result' in trials.keys():
        trials['result'].pop('model', None) # https://stackoverflow.com/questions/15411107/delete-a-dictionary-item-if-the-key-exists
# proceed with pickling
pickle.dump(trials, open("trials.pkl","wb"))

(我从这里拿的)

于 2020-07-02T09:19:29.217 回答