具有多个CNN调用权重的多线程

时间:2019-04-11 12:07:57

标签: python multithreading deep-learning conv-neural-network

我有一个数据集,每个类别有8张图像,每个图像都输入了相应的CNN(8个CNN),所有模型都在tensorflow-gpu上成功训练。但是,当为了评估或测试模型而调用模型的权重时,它将被卡在特定的位置,gpu内存(2 GB)无法处理它们。我想在CPU处理器(8 GB)上使用多线程处理它们。我的通话模型如下:

    model1 = load_model("model_1.model")
    lb1 = pickle.loads(open("label_1.pickle", "rb").read())
    .
    .
    .
    model8 = load_model("model_8.model")
    lb8 = pickle.loads(open("label_8.pickle", "rb").read())

如何将每个调用发送到单独的线程中,以并行方式进行处理。谁能帮我,我将感谢他。 我希望这很清楚。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以通过池或直接使用python多处理模块。

import pickle
from multiprocessing import Pool, Process

def load_model(model):
    # stubbed for testing
    print("model:", model)

def handle_model(n):
    model = load_model(f"model_{n}.model")
    try:
        lb = pickle.loads(open(f"label_{n}.pickle", "rb").read())
    except OSError as e:
        print(e)

    # do work
    # ...


# pool style
pool = Pool(processes=8)
results = pool.map(handle_model, range(1,9))

# Process style
procs = []
for i in range(1,9):
 procs.append(Process(target=handle_model, args=(i,)))
 procs[-1].start()

for proc in procs:
    proc.join()