【问题标题】:Get error "The Session graph is empty." when use multiprocessing for Keras networks收到错误“会话图为空”。对 Keras 网络使用多处理时
【发布时间】:2021-08-18 12:40:56
【问题描述】:

我想评估并获得每个样本的损失。所以我想应用多处理来加速它。但它显示错误“会话图为空。在调用 run() 之前向图中添加操作。”

model.fit(x=X_measured, y=y_train, batch_size=batch_size, epochs=epochs, verbose=0, 
           validation_data=(X_measured_test,y_test), shuffle=True)
    
def get_loss(i, model, X_measured, y_train):
    samples_loss=model.evaluate(x=X_measured[i:i+1,:],y=y_train[i:i+1,:],batch_size=None,verbose=0,steps=1)
    return samples_loss


pool = mp.Pool(mp.cpu_count())
samples_loss=pool.starmap(get_loss, [(j, model, X_measured, y_train) for j in range(X_measured.shape[0])])
pool.close()

【问题讨论】:

    标签: session keras multiprocessing python-multiprocessing tf.keras


    【解决方案1】:

    根据this excellent answer 关于 Keras 中的多处理,最好的经验法则是“在单独的进程中运行与每个模型相关的工作”。

    因此,由于 Keras/Tensorflow 将一堆东西加载/配置到主环境中,因此您构建事物的方式 - 在主环境中训练模型,然后在单独的过程中计算损失是无法完成的不会向下传播到衍生进程的进程。

    如果您确实有单独的模型要训练,那么最好的方法似乎是为每个模型训练和评估生成一个新流程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 1970-01-01
      • 2014-10-02
      • 1970-01-01
      • 2018-10-15
      • 2018-10-10
      • 1970-01-01
      相关资源
      最近更新 更多