Keras多模型运行推理

2024-10-03 02:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我用遗传算法训练模型,适应度函数首先用一定的参数建立模型,然后用该模型对数据集进行推理。你知道吗

显然,遗传算法是非常并行的,但我遇到的问题加载和运行多个模型一次。我正在使用Python的多处理库,并使用Pool方法运行加载模型和运行推理的函数。执行此操作时出现错误:

Blas GEMM launch failed : a.shape=(32, 50), b.shape=(50, 200), m=32, n=200, k=50 [[{{node lstm_1/while/body/_1/MatMul_1}}]] [Op:__inference_keras_scratch_graph_494]

函数调用堆栈: keras\u scratch\u图

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

代码如下:

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

我只想跑起来模型.预测内部池。应用[]多处理功能,以便我可以同时运行多个预测。你知道吗


Tags: samplefrom模型importaddformodellen