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

本文介绍了如何使用Django发布一个深度学习模型(如BiLSTM+CRF的命名实体识别模型)作为服务,以便Java通过URL进行调用。首先,建立并训练深度学习模型,然后创建预测方法,接着搭建Django工程并将预测代码整合进去。通过设置URL路径和GET请求参数,Java可以利用RestTemplate发送请求,获取Django服务返回的JSON数据。
摘要由CSDN通过智能技术生成

标题

问题

一.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发布成服务

9b71b3059dfc60875acf1ef9ae05619f.png

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成功.

4c9feecb7f8214bc7dfcec654db8b22b.png

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引入。

d49f58f9b314a0d3f0479820061e9af7.png

5.get请求加上参数

我这的请求主要需要加上数据库中的id作为请求值。

所以在ner_web_v1加上获取请求的参数,id = request.GET.get(‘id’, ‘0’)。

请求时候加上id参数即可。

7fa476d48e126c921208683dbc303038.png

6.github

https://github.com/zbelieve/ner

代码中的数据库表特别简单可以自己建立一个,TX_TEXT是一些纯文本文章。传的id就是TM_ID。

里面的路径比如字典和模型路径,改成自己本机的绝对路径即可。有用的话,麻烦赏个星。我也是边学边做,讲的不对的勿喷。

d6a4efb516293758f511322763635cc4.png

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

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

@SpringBootTest

@RunWith(SpringRunner.class)

public class testRestTemplate {

@Autowired

RestTemplate restTemplate;

@Test

//测试远程连接获取模型数据,这个就是模型+数据中的数据

public void testRestTemplate(){

// 封装参数,这里是HashMap

Map paramMap = new HashMap();

paramMap.put("id", "11111111");

//测试这个的时候要把服务器开了

//url请求返回的是json数据,之后在这儿转换map,就是键值对类型的,这儿获取的远程访问的数据是cmsconfig的数据,主要想获取他的图片数据在服务器的url,静态化分为模板和数据,这儿就是获得动态的数据

//ResponseEntityforEntity = restTemplate.getForEntity("http://localhost:31001/cms/config/getmodel/5a791725dd573c3574ee333f", Map.class);

ResponseEntity forEntity2 = restTemplate.getForEntity("http://127.0.0.1:8000/hello?id={id}", Map.class,paramMap);

System.out.println(forEntity2);

System.out.println("x");

}

}

b93056659523f706b2ecf081e9f849fe.png

java这块调用我直接在测试包中写的,可以在下面找到源码,里面相关的pom文件就引入就行了。

https://github.com/zbelieve/MicroservicesWeb/tree/master/xc-service-manage-cms/src/test/java/com/xuecheng/manage_cms/dao

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值