Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何正确地使用keras实现多处理?_Python_Tensorflow_Keras_Multiprocessing - Fatal编程技术网

Python 如何正确地使用keras实现多处理?

Python 如何正确地使用keras实现多处理?,python,tensorflow,keras,multiprocessing,Python,Tensorflow,Keras,Multiprocessing,我试图扩展我的项目以充分利用我的cpu,但我在正确使用keras和多处理方面遇到了困难。我的代码试图并行模拟几个游戏 def create_model(): #Very simple conv-net import keras from keras.models import Model from keras.layers import Input, Add, Dense, Flatten, Conv2D, Activation from keras.models

我试图扩展我的项目以充分利用我的cpu,但我在正确使用keras和多处理方面遇到了困难。我的代码试图并行模拟几个游戏

def create_model(): #Very simple conv-net
    import keras
    from keras.models import Model
    from keras.layers import Input, Add, Dense, Flatten, Conv2D, Activation
    from keras.models import model_from_json
    from keras.initializers import glorot_uniform

    inputs =  Input(shape=(8,8,1))
    X = Conv2D(filters=32, kernel_size=(3,3), strides=(1,1), kernel_initializer=glorot_uniform())(inputs)
    X = Activation('relu')(X)
    X = Flatten()(X)
    X = Dense(10, activation='relu', kernel_initializer=glorot_uniform())(X)
    output = Dense(1, activation='sigmoid', name='output', kernel_initializer=glorot_uniform())(X)

    model = Model(inputs=inputs, outputs=output)

    model.compile(optimizer='adam', loss={'output': 'binary_crossentropy'})

    return model

def convert(board):
    import numpy as np
    print("converting")


    string_board = str(board)
    data_board = string_board.split()
    final_data = []

    #normalized board values
    variance = 14
    convert = {'.': 0.0, 'p': -1.0, 'r': -2.0, 'n': -3.0, 'b': -4.0, 'q': -5.0, 'k': -6.0,
     'P': 1.0, 'R': 2.0, 'N': 3.0, 'B': 4.0, 'Q': 5.0, 'K': 6.0}
    for char in data_board:
        final_data.append(convert[char])

    final_data = np.asarray(final_data)
    final_data /= variance
    if not board.turn:
        final_data = -final_data
    final_data = final_data.reshape(1, 8, 8, 1)
    return final_data


return_list = []
model = create_model() #This just creates a conv-net



def board_prediction(board): #Get predictions in parallel 
    print("predicting")

    position = convert(board) #Prep board for CNN
    probs, _ = model.predict(position)

    return probs


def log_result(result):
    return_list.append(results)

def apply_async():
    import chess
    from multiprocessing import Manager, Process, Pool

    pool = Pool()
    for i in range(1):
        board = chess.Board()
        pool.apply_async(board_prediction, args=(board, ), callback=log_result)
    pool.close()
    pool.join()

    print(return_list)


if __name__ == "__main__": #For future multiprocessing
    #Remove tensorflow intialization message for a cleaner cmd
    import os
    import tensorflow as tf
    os.environ['TF_CPP_MIN_LOG_LEVEL'] = '3'
    tf.logging.set_verbosity(tf.logging.ERROR)

    with tf.Session(config=tf.ConfigProto(device_count={'GPU': 0})) as sess:
        pass

    apply_async()
我的代码打印两行打印,但输出一个空列表。此外,将我调用for循环的次数缩放到3次会消耗我计算机中几乎所有的内存(64gb的RAM)

额外信息: 我使用一个GTX 1080 GPU和一个16核threadripper CPU


谢谢

您能将此简化为一个最小的工作示例吗?比如用随机数据建立和训练一个假模型,然后尝试并行预测。如果我们能复制你的代码,然后看看哪里出了问题,那就容易多了。此外,这与您的问题无关,但为什么要多次加载模型?可以!此外,加载模型几次只是为了让它正常工作,我不顾一切的尝试,我编辑了我的帖子来反映你的评论!我可以重现你的错误。不幸的是我没能解决它。这里有一些想法:为什么在调用apply\u async之前打开并关闭tf会话?还有,为什么你想使用multprocessing而不仅仅是批处理呢?谢谢你的尝试,我想使用multprocessing,因为我正在尝试模拟多个随机长度的国际象棋游戏。考虑到这个属性,我不知道如何实现批处理系统。此外,我在应用该方法之前打开该会话并传递它,因为它删除了tensorflow中的初始调试,换句话说,它是不相关的。