gpt4 book ai didi

python - 在支持 Multi-Tenancy 的 Django 中正确加载 Keras 模型

转载 作者:太空狗 更新时间:2023-10-30 01:26:32 25 4
gpt4 key购买 nike

我尝试在 Django 中编写一个 REST API,它使用 Keras 模型返回预测。然而,load_model() 函数需要一些时间来加载模型,我不希望我的用户必须等待这么长时间(每次模型初始化时)。初始化模型的正确方法是什么,以便加载一次并使用同一模型完成预测?

顺便说一句,我认为冷的一种方法是在 settings.py 中初始化模型,如下所示:

settings.py

json_file=open("model.json","r")
loaded_json=json_file.read()
json_file.close()

model=model_from_json(loaded_json)
model.load_weights("model.h5")
MODEL=model

然后在我的 views.py 中,我将这个变量 MODEL 用作:

views.py

from django.conf import settings
model=settings.MODEL
def index():
print "Predicting"
res=model.predict(numpy.stack([test_img]))
print res

如果一次只有一个用户处于事件状态(模型初始化一次,所有后续预测都使用该模型完成),这会很好用。但是,如果多个用户同时处于事件状态,那么它适用于先来的调用,但后一个调用会给出错误

'NoneType' object has no attribute 'shape'
Apply node that caused the error: ConvOp{('imshp', (31, 31, 32)),('kshp', (3, 3)),('nkern', 64),('bsize', None),('dx', 1),('dy', 1),('out_mode', 'valid'),('unroll_batch', None),('unroll_kern', None),('unroll_patch', True),('imshp_logical', (31, 31, 32)),('kshp_logical', (3, 3)),('kshp_logical_top_aligned', True)}(InplaceDimShuffle{0,2,3,1}.0, InplaceDimShuffle{3,2,0,1}.0)
Toposort index: 13
Inputs types: [TensorType(float32, 4D), TensorType(float32, 4D)]
Inputs shapes: [(1L, 31L, 31L, 32L), 'No shapes']
Inputs strides: [(123008L, 124L, 4L, 3844L), 'No strides']
Inputs values: ['not shown', None]
Outputs clients: [[Elemwise{Composite{(i0 * ((i1 + i2) + Abs((i1 + i2))))}}[(0, 1)](TensorConstant{(1L, 1L, 1..1L) of 0.5}, ConvOp{('imshp', (31, 31, 32)),('kshp', (3, 3)),('nkern', 64),('bsize', None),('dx', 1),('dy', 1),('out_mode', 'valid'),('unroll_batch', None),('unroll_kern', None),('unroll_patch', True),('imshp_logical', (31, 31, 32)),('kshp_logical', (3, 3)),('kshp_logical_top_aligned', True)}.0, InplaceDimShuffle{x,0,x,x}.0)]]

我应该如何正确加载模型以便可以同时访问它?

感谢您的宝贵时间。

最佳答案

请看这里https://github.com/keras-team/keras/issues/2397#issuecomment-254919212

例如。在 Django 设置中构造模型...

modelFile = 'path_to_my_model.h5'    
pipe = joblib.load(modelFile.replace('.h5','.pkl'))
model = models.load_model(modelFile)
pipe.steps.append(('nn', model))
graph = tensorflow.get_default_graph()

然后在 Django REST 方法中像这样重用:

import myDjango.settings as sett
# ...

@csrf_exempt
def evaluate(request):
"""
Do the evaluation.
"""
if request.method == 'POST':
data = JSONParser().parse(request)
i = data['inputs']

outputs = MyMlClass.PredictArray( sett.graph, sett.pipe , i, 'model.h5' )

return JsonResponse(outputs, status=201, safe=False)

对我来说效果很好(VisualStudio Django 项目,Python 3.6)。不建议在 REST 处理程序中构建模型,事实上这不会起作用 - 它只会在第一次调用时起作用。

关于python - 在支持 Multi-Tenancy 的 Django 中正确加载 Keras 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44871516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com