django调用java_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發布成服務
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 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");
}
}
java這塊調用我直接在測試包中寫的,可以在下面找到源碼,里面相關的pom文件就引入就行了。
https://github.com/zbelieve/MicroservicesWeb/tree/master/xc-service-manage-cms/src/test/java/com/xuecheng/manage_cms/dao
總結
以上是生活随笔為你收集整理的django调用java_07.手把手教将深度学习利用Django将模型发布成服务供java调用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python类实例化_python基础8
- 下一篇: pytorch 矩阵相乘_深度学习 —