Python 尝试在Django中加载ML模型,以便对用户提交的图像进行分类

Python 尝试在Django中加载ML模型,以便对用户提交的图像进行分类,python,django,tensorflow,Python,Django,Tensorflow,我已经做了一个小的图像分类器,我想在我的网站上使用。我让它在本地工作。我的观点与其他人的观点相去甚远 from .predict import classify def index(request): if request.method == 'POST': form = MyImageClass(request.POST, request.FILES) if form.is_valid(): cd = form.cleaned_

我已经做了一个小的图像分类器,我想在我的网站上使用。我让它在本地工作。我的观点与其他人的观点相去甚远

from .predict import classify

def index(request):
    if request.method == 'POST':
        form = MyImageClass(request.POST, request.FILES)
        if form.is_valid():
            cd = form.cleaned_data
            context = classify(cd)
            return render(request, 'my_html.html', context)
    ...
问题在
predict.py
中,我有

def classify(cd):
    loaded_model = tf.keras.model.load_model(filepath=r'C:\Django 
                                             Projects\my_project\my_app\trained_model')
    ...
    return context

正如我所说,上面的方法是可行的,但我希望能够用相对文件路径加载模型。我已尝试将其保存为SavedModel和h5文件。当我在python中运行
tf.keras.model.load_model('my_model.h5')
(比如main.py)时,文件与文件main.py位于同一目录中没有问题,但是如果我的代码与
predict.classify
中的代码相同,我会得到
OSError:SavedModel文件在my_model.h5/{saved_model.pbtxt | saved_model.pb}中不存在
通过
py manage.py runserver
使用我的网站时。我猜问题可能与静态文件有关?我不太确定。非常感谢您的帮助。

我认为您离正确的解决方案还很远:

  • 首先,我建议您离开FVB,转而使用CBV。(相信我,这在django很重要)

  • 其次,如果要使用“h5”或“hdf5”和“json”,则必须正确创建会话和全局图,这样每次创建runserver并向API发送调用时,只会生成预测,而不必在每次调用中加载模型

  • 第三,如果您在Gunicorn+Nginx的生产中使用Django,您可以通过将“h5”模型转换为“tflite”并使用解释器生成预测,从而避免并行调用中的数据交叉,因为这很难在图形/会话中配置(但您可以,我做到了),而且,它大大减少了最终响应时间、RAM消耗和为使api正常工作而必须编写的代码量,以及项目的总重量,因为tflite更轻

  • 另外,tflite不仅可以与gunicorn+nginx一起使用,而且在本地主机级别也可以很好地使用。(调试为真)

下面是一个示例项目 (时尚专家补充)

提示似乎是一种变通方法。这对我很有用,但我很想听听其他人的想法。