Keras同时运行多个模型的推理

时间:2019-10-28 22:54:51

标签: python tensorflow keras parallel-processing multiprocessing

我正在用遗传算法训练模型,适应度函数首先使用某些参数构建模型,然后使用该模型对数据集进行推断。

显然,遗传算法具有很高的可并行性,但是我遇到了一次加载和运行多个模型的问题。我正在使用Python的多处理库,并运行使用Pool方法加载模型并运行推理的函数。这样做时出现错误:

  

Blas GEMM启动失败:a.shape =(32,50),b.shape =(50,200),m = 32,n = 200,k = 50            [[{{node lstm_1 / while / body / _1 / MatMul_1}}]] [操作:__ inference_keras_scratch_graph_494]

函数调用堆栈: keras_scratch_graph

不知道这里发生了什么,但是当模型没有并行化时不会引发错误。 任何帮助都非常感谢。

代码如下:

import tensorflow as tf
from keras import regularizers
from keras.optimizers import SGD
from keras.models import Sequential
from keras.layers import Dense, Activation, Dropout, Flatten, ELU, LSTM, PReLU, GRU, CuDNNGRU, CuDNNLSTM
from keras.callbacks import EarlyStopping, ModelCheckpoint
import numpy as np
from sklearn import preprocessing
from sklearn.preprocessing import minmax_scale
import matplotlib.pyplot as plt
import math, random, copy, pickle, time, statistics
import pandas as pd
import multiprocessing as mp

def buildModel(windowSize):
    #model to use
    sample_model = Sequential()
    sample_model.add(CuDNNLSTM(50, input_shape = (windowSize, 5), return_sequences=False))
    sample_model.add(Dense(50, activation="relu"))
    sample_model.add(Dense(3, activation="softmax"))
    sample_model.compile(optimizer="adam", loss="categorical_crossentropy")
    sample_model.build()
    #record weight and bias shape
    modelShape = []
    for i in range(len(sample_model.layers)):
      layerShape = []
      for x in range(len(sample_model.layers[i].get_weights())):
        layerShape.append(sample_model.layers[i].get_weights()[x].shape)
      modelShape.append(layerShape)
    return(sample_model, modelShape)

model = BuildModel(120)
pool = mp.Pool(mp.cpu_count())
results = [pool.apply(model.predict, args=(np.array(features[x]), batch_size=len(features[i]))) for x in range(len(features))]
pool.close()

我正在使用的功能并不重要,它们全都是120个随机数或类似物的列表。实际上,我并没有添加我使用的功能,因为它们很大且来自一个很大的文件。

我只希望能够在pool.apply []多处理函数中运行model.predict,以便可以同时运行多个预测。

0 个答案:

没有答案