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

标题

  • 问题
  • 一.python发布成服务
  • 1.先建立一个深度学习模型并训练好
  • 2.建立一个预测方法去调用训练好的模型
  • 3.建立一个Django工程
  • 4.将python利用模型预测的代码放入Django项目中
  • 5.get请求加上参数
  • 6.github
  • 二.JAVA请求url,返回json数据

问题

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

一.python发布成服务

07.手把手教将深度学习利用Django将模型发布成服务供java调用_第1张图片

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成功.
07.手把手教将深度学习利用Django将模型发布成服务供java调用_第2张图片

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引入。
07.手把手教将深度学习利用Django将模型发布成服务供java调用_第3张图片

5.get请求加上参数

我这的请求主要需要加上数据库中的id作为请求值。
所以在ner_web_v1加上获取请求的参数,id = request.GET.get(‘id’, ‘0’)。
请求时候加上id参数即可。
07.手把手教将深度学习利用Django将模型发布成服务供java调用_第4张图片

6.github

https://github.com/zbelieve/ner
代码中的数据库表特别简单可以自己建立一个,TX_TEXT是一些纯文本文章。传的id就是TM_ID。
里面的路径比如字典和模型路径,改成自己本机的绝对路径即可。有用的话,麻烦赏个星。我也是边学边做,讲的不对的勿喷。
07.手把手教将深度学习利用Django将模型发布成服务供java调用_第5张图片

二.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 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");
    }
}

07.手把手教将深度学习利用Django将模型发布成服务供java调用_第6张图片
java这块调用我直接在测试包中写的,可以在下面找到源码,里面相关的pom文件就引入就行了。
https://github.com/zbelieve/MicroservicesWeb/tree/master/xc-service-manage-cms/src/test/java/com/xuecheng/manage_cms/dao

你可能感兴趣的:(技术总结(杂))