Python中如何在Django项目里调用训练好的TensorFlow模型?

可以把模型直接放到 Django 项目里进行调用吗?我想的是先把模型单独封成服务,再请求端口。封服务的话用 tensorflow serving 跟用 tornado 有什么区别,怎么选择?求大神解惑!


Python中如何在Django项目里调用训练好的TensorFlow模型?
7 回复

Django 的 admin 里面可以配置,把它当成一个 Djando 的启动脚本,你放的命令会被执行。


在Django项目里调用训练好的TensorFlow模型,关键是把模型加载和预测逻辑封装成一个服务。我一般这么干:

  1. 保存模型:训练完用model.save()保存成SavedModel格式(一个文件夹),包含结构和权重。

  2. 在Django中加载:在某个app里(比如ml_service/)创建模型加载模块。为了避免每次请求都重新加载,在Django启动时(比如在apps.pyready()方法里)或首次导入时加载一次,放在全局变量或缓存里。

    # ml_service/model_loader.py
    import tensorflow as tf
    import os
    from django.conf import settings
    
    _model = None
    
    def load_model():
        global _model
        if _model is None:
            model_path = os.path.join(settings.BASE_DIR, 'path/to/your/saved_model')
            _model = tf.keras.models.load_model(model_path)
        return _model
    
    def get_model():
        if _model is None:
            return load_model()
        return _model
    
  3. 在视图里调用:在需要预测的视图函数或类视图中,导入这个get_model()函数,对预处理后的数据调用model.predict()

    # views.py
    from django.http import JsonResponse
    from .model_loader import get_model
    import numpy as np
    
    def predict_view(request):
        if request.method == 'POST':
            # 1. 从request中获取数据(例如JSON)
            data = json.loads(request.body)
            # 2. 预处理数据成模型需要的格式(例如转成numpy array)
            input_data = preprocess_data(data) # 你需要实现这个预处理函数
            # 3. 获取模型并预测
            model = get_model()
            prediction = model.predict(input_data)
            # 4. 后处理预测结果并返回
            result = postprocess_prediction(prediction) # 你需要实现这个后处理函数
            return JsonResponse({'prediction': result})
        return JsonResponse({'error': 'Only POST allowed'}, status=400)
    
  4. 处理并发:TensorFlow模型本身是线程安全的,所以多个请求同时调用model.predict()一般没问题。但要确保你的数据预处理和后处理逻辑也是线程安全的。

  5. 依赖:记得在requirements.txt里固定好tensorflow的版本,避免部署时版本不一致出错。

主要注意点就是模型加载一次、全局使用,以及处理好数据的进出格式。如果模型很大,要考虑内存和响应时间。

总结建议:将模型封装为单例服务在视图层调用。

我说的是 admin.py ,如果没记错的话。我以前用 Django 调用 celery 做数据库的定时任务,都是这么处理的

现在写 AI 的是不是都不学基本编程了?
这问题问的很业余啊

确实是业余的,可以指点一下吗

django 就是“处理一次 web 请求”的抽象
你如果能把你的“调用训练好的 tensorflow 模型”转化为“一次 web 请求”,那就可以用

在 django 里调用 tensorflow 并不比在 django 里调用别的更难

也看情况,我身边的很多做算法的都不写后端的,类似 Django,spring。这些很多都是数学或者统计专业的,也有部分计算机的。

回到顶部