涉及的步驟

  1. 構建 Django 應用程序
  2. 訓練機器學習模型
  3. 測試 API

構建 Django 應用程序

讓我們創建并初始化開發環境。

python3 -m venv env
source env/bin/activate

安裝所需的軟件包:

pip install django djangorestframework sklearn numpy

打開命令行并輸入注釋以創建和復制存儲 Django 項目的目錄。為此應用程序創建一個目錄并將其復制(cd)到該目錄中。

mkdir DjangoMLAPI 
cd DjangoMLAPI
django-admin startproject api

我們已經創建了一個 Django 項目,其中將包含我們正在處理的所有代碼。它還將包含數據庫配置和應用程序設置。

“項目”對應于我們正在開發的應用程序,而 Django 將項目中的包稱為“應用程序”。主要包將是 API。

Start Project API 創建了大量運行我們的項目所需的樣板代碼。它將類似于左側的文件樹。

外部 /api 文件夾只包含我們項目的所有代碼。

我們項目的主要 python 包是內部的 /api。

python manage.py runserver

如果您在 Web 瀏覽器中輸入 127.0.0.1:8000,您應該會看到默認的 Django 歡迎網頁。

之后,我們將在我們的項目中創建一個“應用程序”。這將傳播 API 背后的機器學習。我們將命名這個聲音預測器。

cd api
python manage.py startapp soundpredictor

我們添加了一個名為 /soundpredictor 的文件夾,里面有很多文件。

view.py包含可以在每個請求上運行的代碼。因此,我們在方程中添加了矢量化和回歸邏輯。

apps.py是我們將在其中指定配置類的文件。這段代碼只會執行一次,所以我們最終會把代碼放在那里加載我們的模型

讓我們將此應用程序添加到 APPS_INSTALLED。打開 /api/api/settings.py 并將“聲音預測器”添加到 APPS_INSTALLED。

APPS_INSTALLED = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'predictor'
]

在 /soundpredictor 中創建一個名為 /models 的文件夾很重要。將經過訓練的模型移動到此目錄中。

請注意,在真實的生產環境中,這樣我們就不必在每次模型更改時重新部署應用程序。但是,在這種情況下,我們只會在應用程序中包含模型。

我們必須將這些行添加到設置中。此代碼將加載模型。

MODELS = os.path.join(BASE_DIR, 'soundpredictor/models')

編寫在應用程序啟動時加載模型的代碼。在 /api/soundpredictor/apps.py 中部署代碼。創建模型路徑并將模型加載到單獨的變量中。

from django.apps import AppConfig
from django.conf import settings
import os
import pickle
class soundpredictorConfig(AppConfig):
path = os.path.join(settings.MODELS, 'models.p')
with open(path, 'rb') as pickled:
data = pickle.load(pickled)
regressor = data['regressor']
vectorize = data['vectorize']

現在我們需要創建一個視圖來鼓勵我們的回歸邏輯。打開 /api/predictor/views.py 并使用此代碼進行更新。

from django.shortcuts import render 
from .apps import soundpredictorConfig
from django.http import JsonResponse
from rest_framework.views import APIView
class call_model(APIView):
def get(self,request):
if request.method == 'GET':
sound = request.GET.get('sound')
vector = PredictorConfig.vectorizer.transform([sound])
prediction = soundpredictorConfig.regressor.predict(vector)[0]
response = {'dog': prediction}
return JsonResponse(response)

最后一步是將 URL 添加到我們的模型中,以便我們可以訪問它們。請將以下代碼添加到 /api/api/urls.py 中的 urls.py 文件中:

from django.urls import path
from predictor import viewsurlpatterns = [
path('classify/', views.call_model.as_view())
]
from django.conf.urls import url, include
from rest_framework.routers import DefaultRouter
urlpatterns = [
url(r"^api/v1/", include(router.urls)),
]

訓練機器學習模型

要開始該項目,請打開一個 jupyter notebook。運行命令,

pip3 install jupyter notebook

ipython kernel install --user --name=venv

創建一個目錄來存儲筆記本文件,

mkdir research
cd research
jupyter notebook

這種預測分析是訓練模型根據它的語氣來預測動物是否是鴨子。

因此,我們將使用虛構數據訓練模型。這表明它將以與您可能創建的任何其他 sklearn 模型相同的方式工作。

該算法將根據動物發出的聲音確定它是否是鴨子。

創建虛構數據后,每個內部列表中的第一個索引是動物的聲音,第二個索引是指示動物是否是鴨子的布爾標簽。

data = [
['Honk', 1],
['Woof', 0],
['ruff', 0],
['bowwow', 0],
['cackle', 1],
['moo', 0],
['meow', 0],
['clang', 1],
['buzz', 0],
['quack', 0],
['pika', 0]
]

下一個任務是將上述數據轉換為特征和標簽列表。

X = []
y = []
for i in data:
X.append( i[0] )
y.append( i[1] )

在我們將特征轉換為列表后,擬合向量化器,并轉換特征。

from sklearn.feature_extraction.text import CountVectorizer
vectorize = CountVectorizer()
X_vectorized = vectorize.fit_transform(X)

我們正處于訓練線性回歸模型的最后一步,

from sklearn.linear_model import LinearRegression
import numpy as npregressor = LinearRegression()
regressor.fit(X_vectorized, y)

我們必須用幾個例子來測試它以檢查模型是否正常工作,

test_feature = vectorizer.transform(['Honk'])
prediction = regressor.predict(test_feature)
print(prediction)
test_feature = vectorizer.transform(['bowwow'])
prediction = regressor.predict(test_feature)
print(prediction)
test_feature = vectorizer.transform(['meoww'])
prediction = regressor.predict(test_feature)
print(prediction)]
#=> [1.]
#=> [0.]
#=> [0.36363636]

模型看起來很完美。

Pickle 我們的模型到一個字節流中,以便它可以將它們存儲在應用程序中。

import pickle
pick = {
'vectorize': vectorize,
'regressor': regressor
}
pickle.dump( pick, open( 'models' + ".p", "wb" ) )

測試 API

我們可以使用以下命令運行服務器:

python manage.py runserver

添加幾個 curl 請求來測試它。我們可以直接在瀏覽器地址欄中輸入網址。

curl -X GET http://127.0.0.1:8000/classify/?sound=buzz
#=> {"duck": 0.0}
curl -X GET http://127.0.0.1:8000/classify/?sound=quack
#=> {"duck": 1.0}

這個模型正在工作!接近 1 的數字表示它是一只鴨子,接近 0 的數字表示它不是一只鴨子。

我們也可以在瀏覽器中檢查這些。在網址:

http://127.0.0.1:8000/classify/?sound=buzz

http://127.0.0.1:8000/classify/?sound=quack

Django API 可以加載和運行經過訓練的機器學習模型,并使用 URL 測試應用程序。

下載Python源代碼: plot_iris_svc.py

下載Jupyter notebook源代碼: plot_iris_svc.ipynb

本文章轉載微信公眾號@機器學習算法與知識圖譜

上一篇:

kfp-server-api:一個省時高效的 Python 庫

下一篇:

Python + BaiduTransAPI :快速檢索千篇英文文獻(附源碼)
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費