在使用keras的回調函數時報錯
AttributeError: 'Sequential' object has no attribute '_in_multi_worker_mode'
代碼如下
# 3.參數搜索 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
# RandomizedSearchCV參數說明,
# clf1設置訓練的學習器
# param_dist字典類型,放入參數搜索範圍
# scoring = 'neg_log_loss',精度評價方式設定爲"neg_log_loss"
# n_iter=300,訓練300次,數值越大,獲得的參數精度越大,但是搜索時間越長
# n_jobs = -1,使用所有的CPU進行訓練,默認爲1,使用1個CPU
# RandomizedSearchCV採用了cross-validation: 將訓練集分成n分,n-1訓練,最後一份驗證。默認cv=3
random_search_cv = RandomizedSearchCV(sklearn_model,
param_distribution,
cv = 3,
n_iter = 10,
n_jobs = -1)
# use call back function
callbacks = [
# 目標指標不再有改善了,就可以提前終止
#
keras.callbacks.EarlyStopping(monitor='acc', # 被檢測的模型的指標
patience=2, # 沒有進步的訓練輪次爲2,在這之後訓練就會被停止
# min_delta=1e-3
),
# 保存模型
keras.callbacks.ModelCheckpoint(filepath="model_{epoch:03d}-{val_acc:.4f}.h5",# 路徑
monitor='val_acc',# 如果val_loss沒有改善就不覆蓋
save_best_only=True)# 保持最佳模型
]
解決方法
將keras.callbacks.EarlyStopping
和keras.callbacks.ModelCheckpoint
改爲
from keras.callbacks import ModelCheckpoint
from keras.callbacks import EarlyStopping
# 3.參數搜索 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
from keras.callbacks import ModelCheckpoint
from keras.callbacks import EarlyStopping
# RandomizedSearchCV參數說明,
# clf1設置訓練的學習器
# param_dist字典類型,放入參數搜索範圍
# scoring = 'neg_log_loss',精度評價方式設定爲"neg_log_loss"
# n_iter=300,訓練300次,數值越大,獲得的參數精度越大,但是搜索時間越長
# n_jobs = -1,使用所有的CPU進行訓練,默認爲1,使用1個CPU
# RandomizedSearchCV採用了cross-validation: 將訓練集分成n分,n-1訓練,最後一份驗證。默認cv=3
random_search_cv = RandomizedSearchCV(sklearn_model,
param_distribution,
cv = 3,
n_iter = 10,
n_jobs = -1)
# use call back function
callbacks = [
# 目標指標不再有改善了,就可以提前終止
#
EarlyStopping(monitor='acc', # 被檢測的模型的指標
patience=2, # 沒有進步的訓練輪次爲2,在這之後訓練就會被停止
# min_delta=1e-3
),
# 保存模型
ModelCheckpoint(filepath="model_{epoch:03d}-{val_acc:.4f}.h5",# 路徑
monitor='val_acc',# 如果val_loss沒有改善就不覆蓋
save_best_only=True)# 保持最佳模型
]