第一次折叠后,并没有开始并行安装深度网络

问题描述

我将使用深度神经网络在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 (将#修改为@)