07.手把手教将深度学习利用Django将模型发布成服务供java调用

问题

python作为一个含科学计算与深度学习以及机器学习包丰富的语言,自然收到从事算法工作的大佬的青睐,java往往在这一块欠缺,可以利用java做深度学习,但是特别麻烦,现在学习深度学习的基本人人都会点python,但是往往在实际项目中由于各种原因,java依旧是web开发的主力,网上一些做法就是直接将java在程序里面调用python程序,但是这样的话会出各种不兼容和版本的问题,我觉得最好是将深度学习模型预测这块的代码用Django发布成一个服务然后供java这边通过url调用。

一.python发布成服务

在这里插入图片描述

1.先建立一个深度学习模型并训练好

BiLSTM+CRF模型构建

inputs = Input(shape=(MAX_LEN,), dtype='int32')
x = Masking(mask_value=0)(inputs)
x = Embedding(VOCAB_SIZE, EMBED_DIM, mask_zero=True)(x)
x = Bidirectional(LSTM(HIDDEN_SIZE, return_sequences=True))(x)
x = TimeDistributed(Dense(CLASS_NUMS))(x)
outputs = CRF(CLASS_NUMS)(x)
model = Model(inputs=inputs, outputs=outputs)
model.summary()

比如我这是先建立了一个命名实体识别的深度学习模型,用keras建立的,并训练生成模型ch_ner_model4.h5,模型建立如上所示,具体代码请移步github,后面会贴出。

2.建立一个预测方法去调用训练好的模型

加载模型,具体代码请移步github,后面会贴出。

'''用来预测'''

from keras.models import load_model
import numpy as np
custom_ob = {'CRF': CRF,"crf_loss":crf_loss,"crf_viterbi_accuracy":crf_viterbi_accuracy,"f1":f1}
model = load_model('model/ch_ner_model3.h5', custom_objects=custom_ob)
maxlen = 500

3.建立一个Django工程

很简单,pip install Django即可,不过注意版本号,我这用的是3.0以上的。我这采用Anaconda建立的虚拟环境。
用命令django-admin startproject ner_web_v1建立这个工程,然后cd进去,输入命令
python3 manage.py runserver 127.0.0.1:8000/。看到下面这个即启动Django成功.
在这里插入图片描述

4.将python利用模型预测的代码放入Django项目中

就是图1中第三个箭头的指向建立一个这样的预测代码,注意文件夹以及文件的位置。可以把所有的模型预测代码都封装在一个方法里面,然后最终返回的话如果返回json数据的话,利用下面的代码返回json数据,这样不仅能返回json数据而且中文和字符不会报错,解决了Django返回json的中文字符乱码问题。

return HttpResponse(json.dumps(TextLine,ensure_ascii=False), content_type="application/json,charset=utf-8")

在url这里面还要配上路径,我这随便配置了hello,右边的ner.hello就是之前封装代码的方法,需要import引入。
在这里插入图片描述

5.get请求加上参数

我这的请求主要需要加上数据库中的id作为请求值。
所以在ner_web_v1加上获取请求的参数,id = request.GET.get(‘id’, ‘0’)。
请求时候加上id参数即可。
在这里插入图片描述

6.github

https://github.com/zbelieve/ner
代码中的数据库表特别简单可以自己建立一个,TX_TEXT是一些纯文本文章。传的id就是TM_ID。
里面的路径比如字典和模型路径,改成自己本机的绝对路径即可。有用的话,麻烦赏个星。我也是边学边做,讲的不对的勿喷。
在这里插入图片描述

二.JAVA请求url,返回json数据

java这块在测试包中利用restTemplate发送请求,即可获取之前python发布服务后传的json数据

@SpringBootTest
@RunWith(SpringRunner.class)
public class testRestTemplate {
    @Autowired
    RestTemplate restTemplate;
    @Test
    //测试远程连接获取模型数据,这个就是模型+数据中的数据
    public void testRestTemplate(){
        // 封装参数,这里是HashMap
        Map<String, String> paramMap = new HashMap<String, String>();
        paramMap.put("id", "11111111");
        //测试这个的时候要把服务器开了
        //url请求返回的是json数据,之后在这儿转换map,就是键值对类型的,这儿获取的远程访问的数据是cmsconfig的数据,主要想获取他的图片数据在服务器的url,静态化分为模板和数据,这儿就是获得动态的数据
        //ResponseEntity<Map> forEntity = restTemplate.getForEntity("http://localhost:31001/cms/config/getmodel/5a791725dd573c3574ee333f", Map.class);
        ResponseEntity<Map> forEntity2 = restTemplate.getForEntity("http://127.0.0.1:8000/hello?id={id}", Map.class,paramMap);
        System.out.println(forEntity2);
        System.out.println("x");
    }
}

在这里插入图片描述
java这块调用我直接在测试包中写的,可以在下面找到源码,里面相关的pom文件就引入就行了。
https://github.com/zbelieve/MicroservicesWeb/tree/master/xc-service-manage-cms/src/test/java/com/xuecheng/manage_cms/dao

  • 8
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值