Python Keras运行多模型推理&x27;马上

Python Keras运行多模型推理&x27;马上,python,tensorflow,keras,parallel-processing,multiprocessing,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}}][Op:___推理_ker

我用遗传算法训练模型,适应度函数首先用某些参数建立模型,然后用该模型对数据集进行推理

显然,遗传算法是非常并行的,但我在一次加载和运行多个模型时遇到了问题。我正在使用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}}][Op:___推理_keras_scratch_图_494]

函数调用堆栈: keras_划痕图

不确定这里发生了什么,但是当模型没有并行化时不会抛出错误。 非常感谢您的帮助

代码如下:

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个随机数的列表或其他什么。我实际上没有添加我使用的功能,因为它们很大,而且来自一个非常大的文件


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

如果没有任何代码,这将很难回答。请参阅添加的代码,不确定它是否真的有用,尽管@Gobrewers14这是不可复制的。人们应该能够从这个问题中复制并粘贴代码,并将其放在python REPL中,代码会复制错误。否则我们只是猜测。我们不知道什么是
fitnessFunction
modelToUse
功能
,等等。我添加了可以运行和复制的代码,只需要一些随机功能,但代码传达了整个有问题的部分。如果需要添加更多内容,请告诉我。如果没有任何代码,这将很难回答。请参阅添加的代码,不确定它是否真的有用,尽管@Gobrewers14这是不可复制的。人们应该能够从这个问题中复制并粘贴代码,并将其放在python REPL中,代码会复制错误。否则我们只是猜测。我们不知道什么是
fitnessFunction
modelToUse
功能
,等等。我添加了可以运行和复制的代码,只需要一些随机功能,但代码传达了整个有问题的部分。如果我还需要补充什么,请告诉我。