无法在Python流程中适应模型?

时间:2019-08-06 21:35:01

标签: python tensorflow keras

我无法在多处理流程中训练我的keras模型。我有一个要在主线程上写入的数据队列,因此我希望模型同时进行自我训练。但是,它只是挂在对model.fit()进行调用的行上。该模型是keras多gpu模型。

我试图不使进程成为守护程序,而结果没有变化。

这很好:

def reader_proc(queue, model):
    while (True):
        if (queue.empty()):
            time.sleep(10)
            continue
        d = queue.get()
        x = d[0]
        y = d[1]
        print("training")
        time.sleep(1)
        print(y[0])
        print("done training")
        sys.stdout.flush()

这不是:

def reader_proc(queue, model):
    while (True):
        if (queue.empty()):
            time.sleep(10)
            continue
        d = queue.get()
        x = d[0]
        y = d[1]
        print("training")
        model.fit(x=x, y=[y.T[0], y.T[1]], epochs=1, batch_size=32, callbacks=[tensorboard_callback, checkpoint],shuffle=True)
        print("done training")
        sys.stdout.flush()

该过程正在这样启动:

reader_p = Process(target=reader_proc, args=(pqueue, parallel_model))
reader_p.daemon = True
reader_p.start()

调用流程外数据的火车也很好:

d = pqueue.get()
x = d[0]
y = d[1]
parallel_model.fit(x=x, y=[y.T[0], y.T[1]], epochs=1, batch_size=32, callbacks=[tensorboard_callback, checkpoint],shuffle=True)

添加对model.fit()的调用后,线程将打印(“训练”),但从不打印“完成的训练”。带有睡眠的示例按预期工作。

1 个答案:

答案 0 :(得分:0)

根据documentation(请参阅链接部分末尾的注释),multiprocessing.Pool在IPython(这是一个“交互式解释器”)中不起作用,尤其是在ms-windows上。