繁体   English   中英

将张量流模型传递给多处理python库的进程

[英]Passing tensorflow model to Process of multiprocessing python library

当我尝试将 keras 模型的副本作为参数传递给 Python 中的 multiprocessing.Process 对象时出现错误。 代码如下:

def dumb_fun(x, model):
    print(x)
    print(model)


def clone(model):
    new_model = clone_model(model)
    new_model.set_weights(model.get_weights())
    return new_model


if __name__ == '__main__':

    input = layers.Input(shape=(120,160,2))
    x = layers.Conv2D(32, (3, 3), activation='relu')(input)
    x = layers.MaxPool2D((2, 2))(x)
    x = layers.Conv2D(64, (3, 3), activation='relu')(x)
    x = layers.MaxPool2D((2, 2))(x)
    x = layers.Conv2D(128, (3, 3), activation='relu')(x)
    x = layers.MaxPool2D((2, 2))(x)
    x = layers.Flatten()(x)
    x = layers.Dense(64, activation='relu')(x)
    x = layers.Dense(32, activation='relu')(x)
    actions = layers.Dense(5, activation='softmax')(x)
    # actor network
    actor = keras.Model(input, actions, name="actor")

    numbers = [1,1,2,3,5,8,13]
    num_procs = len(numbers)

    actors = []
    for i in range(num_procs):
        actors.append(clone(actor))

    processes = []

    for i in range(num_procs):
        processes.append(Process(target=dumb_fun, args=(numbers[i],actors[i])))

    for proc in processes:
        proc.start()

    for proc in processes:
        proc.join()

我收到以下错误:

回溯(最后一次调用):文件“”,第 1 行,在文件“C:\Users\boezi\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py”中,第 116 行,在 spawn_main 退出代码中= _main(fd, parent_sentinel) 文件“C:\Users\boezi\AppData\Local\Programs\Python\Python310\lib\multiprocessing\spawn.py”,第 126 行,在 _main self = reduction.pickle.load(from_parent)文件“C:\Users\boezi\PycharmProjects\AWSDeepRacerChallenge\env\lib\site-packages\keras\saving\pickle_utils.py”,第 48 行,deserialize_model_from_bytecode 模型 = save_module.load_model(temp_dir) 文件“C:\Users\ boezi\PycharmProjects\AWSDeepRacerChallenge\env\lib\site-packages\keras\utils\traceback_utils.py”,第 67 行,在 error_handler 中从无文件“C:\Users\boezi\PycharmProjects\AWSDeepRacerChallenge\ env\lib\site-packages\tensorflow\python\saved_model\load.py",第 915 行,在 load_partial 中引发 FileNotFoundError(FileNotFoundError: Unsuccessful TensorSliceReader constructor: Failed to find any m 正在为 ram://c7e98835-fe78-46a1-b2b1-fb9241d8ef90/variables/variables 匹配文件您可能正尝试在与计算设备不同的设备上加载。 考虑将 tf.saved_model.LoadOptions 中的experimental_io_device选项设置为tf.saved_model.LoadOptions ,例如“/job:localhost”。

我在没有通过模型的情况下尝试了多处理部分,它可以工作,有什么问题?

我最近遇到了类似的问题。 问题是您不能将不可拾取的对象传递给 Process 方法。 我建议您尝试相同的方法,但使用线程库中的 Thread 方法。
https://stackoverflow.com/a/3044626/12763693

import threading
threading.Thread(target=function, args=(,))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM