在使用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)# 保持最佳模型
]