我无法在多处理流程中训练我的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()的调用后,线程将打印(“训练”),但从不打印“完成的训练”。带有睡眠的示例按预期工作。
答案 0 :(得分:0)
根据documentation(请参阅链接部分末尾的注释),multiprocessing.Pool
在IPython(这是一个“交互式解释器”)中不起作用,尤其是在ms-windows上。