Python中如何在Django项目里调用训练好的TensorFlow模型?
可以把模型直接放到 Django 项目里进行调用吗?我想的是先把模型单独封成服务,再请求端口。封服务的话用 tensorflow serving 跟用 tornado 有什么区别,怎么选择?求大神解惑!
Python中如何在Django项目里调用训练好的TensorFlow模型?
Django 的 admin 里面可以配置,把它当成一个 Djando 的启动脚本,你放的命令会被执行。
在Django项目里调用训练好的TensorFlow模型,关键是把模型加载和预测逻辑封装成一个服务。我一般这么干:
-
保存模型:训练完用
model.save()保存成SavedModel格式(一个文件夹),包含结构和权重。 -
在Django中加载:在某个app里(比如
ml_service/)创建模型加载模块。为了避免每次请求都重新加载,在Django启动时(比如在apps.py的ready()方法里)或首次导入时加载一次,放在全局变量或缓存里。# 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 -
在视图里调用:在需要预测的视图函数或类视图中,导入这个
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) -
处理并发:TensorFlow模型本身是线程安全的,所以多个请求同时调用
model.predict()一般没问题。但要确保你的数据预处理和后处理逻辑也是线程安全的。 -
依赖:记得在
requirements.txt里固定好tensorflow的版本,避免部署时版本不一致出错。
主要注意点就是模型加载一次、全局使用,以及处理好数据的进出格式。如果模型很大,要考虑内存和响应时间。
总结建议:将模型封装为单例服务在视图层调用。
我说的是 admin.py ,如果没记错的话。我以前用 Django 调用 celery 做数据库的定时任务,都是这么处理的
现在写 AI 的是不是都不学基本编程了?
这问题问的很业余啊
确实是业余的,可以指点一下吗
django 就是“处理一次 web 请求”的抽象
你如果能把你的“调用训练好的 tensorflow 模型”转化为“一次 web 请求”,那就可以用
在 django 里调用 tensorflow 并不比在 django 里调用别的更难
也看情况,我身边的很多做算法的都不写后端的,类似 Django,spring。这些很多都是数学或者统计专业的,也有部分计算机的。

