问题描述
我将使用深度神经网络在10倍交叉验证中实施直接预测策略以对时间序列进行预测。使用直接策略进行预测对于在H个不同的时间范围内训练H模型是必要的。 由于这种预测策略在执行时间上非常昂贵,因此我想利用远程计算机的所有内核来适应各种模型。这是我感兴趣的代码的一部分:
import multiprocessing
from os import path
from lib import custom_callbacks as cbacks
def fit_model(x_train,y_train,experiment_model,model_map,epochs,config,cp_dir,output_log_keras,idx=0):
from keras.callbacks import EarlyStopping
from keras.callbacks import CSVLogger
from keras.callbacks import ModelCheckpoint
print('Worker %s in fitting model' % str(idx))
# MODEL
# CALLBACKS -> EARLY STOPPING
es = EarlyStopping(monitor='loss',min_delta=float(config['MODEL']['min_delta']),mode='min',patience=int(config['MODEL']['patience']),verbose=1,restore_best_weights=True)
# CALLBACKS -> CSV LOGGER
csv_logger = csv_logger = CSVLogger(output_log_keras + 'model_step_' + str(idx + 1),append=True,separator=';')
# CALLBACK -> SAVE CHECK POINT
path_to_save_cp = path.join(cp_dir,'model_step_' + str(idx + 1))
save_cp = ModelCheckpoint(path_to_save_cp,monitor='loss',verbose=0,save_best_only=False,save_weights_only=False)
# CALLBACK -> TIME HISTORY
time_callback = cbacks.TimeEpochs()
# MODEL________________
model = getattr(experiment_model,model_map[config['MODEL']['model']])()
model.compile(
loss={
'PL_output': config['COMPILE']['PL_loss'],'IAT_output': config['COMPILE']['IAT_loss'],'PD_output': config['COMPILE']['PD_loss']
},loss_weights={
'PL_output': float(config['COMPILE']['PL_weight']),'IAT_output': float(config['COMPILE']['IAT_weight']),'PD_output': float(config['COMPILE']['PD_weight'])
},optimizer='adam',metrics=['accuracy'])
print(model.summary())
history = model.fit(x_train,epochs=epochs,batch_size=32,callbacks=[es,time_callback,csv_logger,save_cp])
def fit_model_parallel(x_train,lookahead,n_features,output_log_keras):
jobs = []
for i in range(lookahead):
y_train_list = [y_train[:,j * lookahead + i] for j in range(n_features)]
p = multiprocessing.Process(target=fit_model,args=(x_train,y_train_list,i))
jobs.append(p)
p.start()
for job in jobs:
job.join()
问题在于拟合的模型不是从第二折开始,此外,我没有返回任何错误。好像进程陷入僵局,但我不知道如何。问题出在哪里?
更新1 :我更正了CSVLogger回调的输出文件名,为每个受过训练的模型分配了一个文件,因为最初它可能是唯一的并发源,但是问题仍然存在>
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)