【问题标题】:can't pickle _thread.RLock objects using keras无法使用 keras 腌制 _thread.RLock 对象
【发布时间】:2019-01-29 12:48:54
【问题描述】:

我创建了 keras 模型,然后将该模型保存到 pickle

程序代码:

print(base_learners)
# 9) 앙상블 모델 저장하기
pickle.dump(meta_learner, open('./models/meta_learner.pkl', 'wb'))
pickle.dump(base_learners, open('./models/base_learners.pkl', 'wb'))
pickle.dump(models, open('./models/models.pkl', 'wb'))

当我运行代码时,我收到以下错误:

Traceback (most recent call last):
  File "MODEL02_ensemble.py", line 265, in <module>
    main()
  File "MODEL02_ensemble.py", line 246, in main
    pickle.dump(base_learners, open('./models/base_learners.pkl', 'wb'))
TypeError: can't pickle _thread.RLock objects

这是怎么回事? 想到这里,变量中输入的值是正常的。

当我打印“base_learners”时:

{'dnn': <keras.engine.sequential.Sequential object at 0x000001C43DDE8EF0>, 'random forest': RandomForestClassifier(bootstrap=True, class_weight=None, criterion='gini',
            max_depth=4, max_features='sqrt', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=2, min_samples_split=2,
            min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=-1,
            oob_score=False, random_state=42, verbose=0, warm_start=False), 'extra trees': ExtraTreesClassifier(bootstrap=False, class_weight=None, criterion='gini',
           max_depth=4, max_features='auto', max_leaf_nodes=None,
           min_impurity_decrease=0.0, min_impurity_split=None,
           min_samples_leaf=2, min_samples_split=2,
           min_weight_fraction_leaf=0.0, n_estimators=100, n_jobs=-1,
           oob_score=False, random_state=42, verbose=0, warm_start=False)}

【问题讨论】:

    标签: multithreading pickle


    【解决方案1】:

    我找到了解决方案:

    from threading import Thread 
    
    # base_learners has 3 models. so filename1~3
    def hanlder(filename1,filename2,filename3):
        with open('./models/base_learners.pkl', 'wb') as file:
            pickle.dump(filename1, file)
            pickle.dump(filename2, file)
            pickle.dump(filename3, file)
    
    
    t = Thread(target=hanlder, args=(base_learners))
    t.start()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2018-09-18
      • 2019-03-03
      • 1970-01-01
      • 2020-12-31
      相关资源
      最近更新 更多