Flask を使用して機械学習モデルを簡単にデプロイするにはどうすればよいですか?

Flask を使用して機械学習モデルを簡単にデプロイするにはどうすればよいですか?

[51CTO.com クイック翻訳] データ サイエンティスト/機械学習エンジニアが Scikit-Learn、TensorFlow、Keras、または PyTorch を使用して機械学習モデルを開発する場合、最終的な目標はそれを本番環境にデプロイすることです。機械学習プロジェクトに取り組むとき、探索的データ分析 (EDA)、特徴量エンジニアリング、ハイパーパラメータ調整に重点を置きすぎて、モデルの予測から実際の価値を抽出するという主な目標を忘れてしまうことがよくあります。

機械学習モデルをデプロイする、またはモデルを本番環境にデプロイするということは、モデルをエンドユーザーまたはシステムが利用できるようにすることを意味します。ただし、機械学習モデルの導入には複雑さが伴います。この記事の目的は、Flask API を使用してトレーニング済みの機械学習モデルを本番環境にデプロイする方法を学ぶことです。

線形回帰を使用して、金利と最初の 2 か月の売上を使用して 3 か月目の売上を予測します。

線形回帰とは何ですか?

線形回帰モデルの目的は、1 つ以上の特徴 (独立変数) と連続ターゲット変数 (従属変数) 間の関係を見つけることです。特徴が 1 つしかない場合は単変量線形回帰と呼ばれ、特徴が複数ある場合は多変量線形回帰と呼ばれます。

線形回帰の仮定

線形回帰モデルは次の式で表すことができます。

  • Yは予測値である
  • θ₀は部分項です。
  • θ₁,…,θnはモデルパラメータである
  • x1、x2、…、xnは固有値です。

図1. 線形回帰図

Flask を使用する理由は何ですか?

  • 使いやすいです。
  • 組み込みの開発サーバーおよびデバッガー。
  • 統合されたユニットテストのサポート。
  • REST リクエストディスパッチを活用します。
  • 広範なドキュメント。

プロジェクト構造

このプロジェクトは 4 つの部分から構成されます。

  1. model.py – 最初の 2 か月の売上に基づいて 3 か月目の売上を予測する機械学習モデルのコードが含まれています。
  2. app.py – これには、GUI または API 呼び出しを通じて売上の詳細を受け取り、モデルに基づいて予測値を計算して返す Flask API が含まれています。
  3. request.py — request モジュールを使用して、app.py で定義された API を呼び出し、戻り値を表示します。
  4. HTML/CSS – ユーザーが売上の詳細を入力し、3 か月目の予測売上を表示できるようにする HTML テンプレートと CSS スタイルが含まれています。

図2. 機械学習モデルを展開するためのパイプライン

環境とツール

  1. サイキットラーン
  2. パンダ
  3. ナンピー
  4. フラスコ

コードはどこですか?

コードから始めましょう。 Github 上のプロジェクト全体は、こちらからご覧いただけます。

まず、ユーザーが値を入力できるように HTML を使用してフロントエンドを構築します。ユーザーは、金利、初月の売上、2 か月目の売上の 3 つのフィールドに入力する必要があります。

  1. <!DOCTYPE html>
  2. <html>
  3. <ヘッド>
  4. <メタ文字セット= "UTF-8" >
  5. <title>デプロイメントチュートリアル 1</title>
  6. <link href= 'https://fonts.googleapis.com/css?family=Pacifico' rel= 'スタイルシート' type= 'text/css' >
  7. <link href= 'https://fonts.googleapis.com/css?family=Arimo' rel= 'スタイルシート' type= 'text/css' >
  8. <link href= 'https://fonts.googleapis.com/css?family=Hind:300' rel= 'スタイルシート' type= 'text/css' >
  9. <link href= 'https://fonts.googleapis.com/css?family=Open+Sans+Condensed:300' rel= 'スタイルシート' type= 'text/css' >
  10. <link rel= "スタイルシート" href= "{{ url_for('static', filename='css/style.css') }}" >
  11.    
  12. </head>
  13.  
  14. <body style= "背景: #000;" >
  15. <div クラス = "ログイン" >
  16. <h1>売上予測</h1>
  17.  
  18. <! -- ML へのクエリを受信するためのメイン入力 -->  
  19. <フォームアクション= "{{ url_for('predict')}}"メソッド = "post" >
  20. <入力タイプ= "テキスト"   name = "rate" placeholder = "rate" required = "必須" />
  21. <入力タイプ= "テキスト"   name = "初月の売上" placeholder = "初月の売上" required = "必須" />
  22. <入力タイプ= "テキスト"   name = "2 か月目の売上" placeholder = "2 か月目の売上" required = "必須" />
  23. <button type= "submit" class= "btn btn-primary btn-block btn-large" > 3 か売上を予測する</button>
  24. </フォーム>
  25.  
  26. <br>
  27. <br>
  28. {{予測テキスト}}
  29.  
  30. </div>
  31. </本文>
  32. </html>

次に、CSS を使用して、入力ボタン、ログイン ボタン、背景のスタイルを構築しました。

  1. urlをインポートします(https://fonts.googleapis.com/css?family=Open+Sans )。
  2.      
  3. html { 幅: 100%; 高さ: 100%; オーバーフロー: 非表示; }
  4.      
  5. 体 {
  6. 幅: 100%;
  7. 高さ:100%;
  8. フォントファミリ: 'Helvetica' ;
  9. 背景: #000;
  10. 色: #fff;
  11. フォントサイズ: 24px;
  12. テキスト配置:中央;
  13. 文字間隔:1.4px;
  14.      
  15. }
  16. 。ログイン {
  17. 位置:絶対;
  18. 上位:40%
  19. :50%;
  20. マージン: -150px 0 0 -150px;
  21. 幅:400ピクセル;
  22. 高さ:400px;
  23. }
  24.      
  25. .login h1 { 色: #fff; テキストシャドウ: 0 0 10px rgba(0,0,0,0.3); 文字間隔: 1px; テキスト配置: center; }
  26.      
  27. 入力{
  28. 幅: 100%;
  29. 下マージン: 10px;
  30. 背景: rgba(0,0,0,0.3);
  31. 境界線: なし;
  32. アウトライン: なし;
  33. パディング: 10px;
  34. フォントサイズ: 13px;
  35. 色: #fff;
  36. テキストシャドウ: 1px 1px 1px rgba(0,0,0,0.3);
  37. 境界線: 1px実線rgba(0,0,0,0.3);
  38. 境界線の半径: 4px;
  39. ボックスシャドウ: インセット 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);
  40. -webkit-transition: box-shadow .5s のイージー;
  41. -moz-transition: box-shadow .5s のイーズ;
  42. -o-transition: box-shadow .5s のイーズ;
  43. -ms-transition: ボックスシャドウ .5s の緩和;
  44. transition: box-shadow .5s のイーズ;
  45. }
  46. GitHubホストされている rawstyle.css を表示
  47. >

このプロジェクト用に、金利、最初の月の売上、2 か月目の売上、3 か月目の売上の 4 つの列を持つカスタム売上データセットを作成しました。  

レート

最初の月の売上

2か月目の売上

3か月目の売上

2

500

300

4

300

650

4つ

600

200

400

450

320

650

セブン

600

250

350

550

200

700

GitHub でホストされている生のsales.csv を表示

それでは、3 か月目の売上を予測する機械学習モデルを構築しましょう。まず、Pandas を使用して欠損値を処理してみましょう。 1 つ以上の項目に情報が提供されない場合、データは失われます。値が指定されていない場合は、Interest Rate 列にゼロを入力し、First Month Sales 列に列の平均値を入力します。機械学習アルゴリズムとして線形回帰を使用しています。

シリアル化/デシリアル化

簡単に言うと、シリアル化とは、Python オブジェクトをディスク上に書き込み (オブジェクトはどこにでも転送可能)、後で Python スクリプトによって逆シリアル化 (読み戻す) する方法です。

図3. シリアル化とデシリアル化

私は、ピクルリングを使用して、Python オブジェクトの形式のこのモデルを文字ストリームに変換します。この文字ストリームには、別の Python スクリプトを使用してオブジェクトを再構築するために必要なすべての情報が含まれているという考え方です。

  1. numpyをnpとしてインポートする
  2. matplotlib.pyplot をpltとしてインポートします。
  3. pandasをpdとしてインポートする
  4. 輸入ピクルス
  5.      
  6. データセット = pd.read_csv( 'sales.csv' )
  7.      
  8. データセット[ 'rate' ].fillna(0, inplace= True )
  9.      
  10. データセット[ 'sales_in_first_month' ].fillna(データセット[ 'sales_in_first_month' ].mean(), inplace= True )
  11.      
  12. X = データセット.iloc[:, :3]
  13.      
  14. def convert_to_int(単語):
  15. word_dict = { '1' :1, '2' :2, '3' :3, '4' :4, '5' :5, '6' :6, '7' :7, '8' :8,
  16. 「9」 :9、 「10」 :10、 「11」 :11、 「12」 :12、 「0」 :0、「0: 0」}
  17. word_dict[単語]を返す
  18.      
  19. X[ 'rate' ] = X[ 'rate' ].apply(lambda x : convert_to_int(x))
  20.      
  21. y = データセット.iloc[:, -1]
  22.      
  23. sklearn.linear_modelからLinearRegression をインポートします
  24. 回帰子 = LinearRegression()
  25.      
  26. 回帰器.fit(X, y)
  27.      
  28. pickle.dump(回帰器、 open ( 'model.pkl' 'wb' ))
  29.      
  30. モデル = pickle.load ( open ( 'model.pkl' 'rb' ))
  31. 印刷(モデル.予測([[4, 300, 500]]))
  32. GitHubホストされている rawmodel.py を表示

次の部分は、GUI を通じて売上の詳細を受け取り、モデルに基づいて予測売上を計算する API を構築することです。これを実行するには、ピクルされたモデルを Python オブジェクトに逆シリアル化します。メインページを設定するには、index.html を使用します。フォームの値が POST を使用して /predict に送信されると、予測された売上が取得されます。

結果を表示するには、/results に別の POST リクエストを送信するだけです。 JSON 入力を受け取り、トレーニング済みのモデルを使用して予測を行い、API エンドポイントを通じてアクセスできる JSON 形式で予測を返します。

  1. numpyをnpとしてインポートする
  2. FlaskからFlask、request、jsonify、render_template をインポートします
  3. 輸入ピクルス
  4.  
  5. アプリ = Flask(__name__)
  6. モデル = pickle.load ( open ( 'model.pkl' 'rb' ))
  7.  
  8. @app.route( '/' )
  9. デフホーム():
  10. render_template( 'index.html' )を返します
  11.  
  12. @app.route( '/predict' , メソッド=[ 'POST' ])
  13. def 予測():
  14.  
  15. int_features = [ int (x)xrequest.form.values ​​()内に格納]
  16. final_features = [np.array(int_features)]
  17. 予測 = model.predict(final_features)
  18.  
  19. 出力= round(予測[0], 2)
  20.  
  21. return render_template( 'index.html' , prediction_text= '売上高は $ {} になるはずです' .format( output ))
  22.  
  23. @app.route( '/results' , メソッド=[ 'POST' ])
  24. def 結果():
  25.  
  26. データ = request.get_json(強制= True )
  27. 予測 = model.predict([np.array(list( data.values ()))])
  28.  
  29. 出力= 予測[0]
  30. jsonify(出力)を返す
  31.  
  32. __name__ == "__main__"の場合:
  33. app.run(デバッグ= True )
  34. GitHubホストされている rawapp.py を表示

最後に、request モジュールを使用して、app.py で定義された APP を呼び出します。 3 か月目の返品売上が表示されます。

  1. 輸入リクエスト 
  2. url = 'http://localhost:5000/結果'    
  3. r = リクエスト.post(url,json={ 'レート' :5, '最初の月の売上' :200, '2番目の月の売上' :400})  
  4. 印刷(r.json())  
  5. GitHubホストされている rawrequest.py を表示

結果

このコマンドを使用して、Web アプリケーションを実行します。

  1. $ pythonアプリ.py

図4

Web ブラウザで http://127.0.0.1:5000/ を開くと、以下に示すような GUI が表示されます。

図5. グラフィカルユーザーインターフェース

結論

この記事では、機械学習モデルをデプロイする非常に簡単な方法を説明しました。線形回帰を使用して、金利と最初の 2 か月の売上を使用して 3 か月目の売上を予測しました。この記事で学んだことを活用して、クールなモデルを構築し、それを本番環境にデプロイして、他の人がその結果を楽しめるようにすることができます。

原題: Flask を使用して機械学習モデルを簡単にデプロイする方法、著者: Abhinav Sagar

[51CTOによる翻訳。パートナーサイトに転載する場合は、元の翻訳者と出典を51CTO.comとして明記してください]

<<:  構築は簡単だが、維持は難しい! Googleの機械学習システムの苦い教訓

>>:  AIが認知症患者の自立した生活にどのように役立つか

ブログ    

推薦する

将来、人工知能ロボットに置き換えられる可能性のある10の仕事

専門家は、将来的には職業の約 70% が自動化されると予測しています。運転手、教師、ベビーシッター、...

2022年の主要イベントが近づいています。ビッグネームの共演をお見逃しなく

2022年、デジタル化の東風が到来し、新たな技術・産業革命が本格化します。デジタル化の波に立ち、絶え...

ディープラーニング/コンピュータービジョンでよくある8つの間違いとその回避方法

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式...

畳み込みニューラルネットワークによる画像認識の仕組み

[[202854]]画像認識とは何ですか? なぜ必要なのですか?マシンビジョンの概念では、画像認識と...

マイクロソフトが新しいハイブリッド会議機能をリリース: Teams Rooms、リモート プレゼンテーション カメオ、Viva Connections モバイル アプリ

IT Homeは9月10日、マイクロソフトが、オフラインの会議室に中央制御のオーディオデバイスを設置...

データセンター: クラウドと AI 導入の鍵となる要素

2023 年の新規建設の大幅な増加は、データ センターの空室率が史上最低水準にある重要な時期に起こり...

座標系の変換を本当に理解していますか?自動運転にはマルチセンサーが不可欠

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

ネットワークディスク上の大きなモデルを使うのはとても気持ちがいいです!隠された写真は3秒で発見され、親戚や友人全員が衝撃を受けた

AIの助けを借りて、自分が会社の重役になれる日が来るとは思ってもいませんでした!同僚のクローゼットの...

...

速報です! ImageNetデータセット内のすべての顔はぼかされている

2012 年、AI 研究者はコンピューター ビジョンで大きな進歩を遂げ、ImageNet として知ら...

1 つの文で 10 万以上のコンテキストを持つ大規模モデルの真のパワーが発揮され、スコアが 27 から 98 に増加し、GPT-4 と Claude2.1 に適用可能

大きなモデルはすべてコンテキスト ウィンドウをロールアップしました。Llama -1 のときは、標準...

SchiramRank - 公平にランク付けする方法を学ぶ

2023年に終了した国際学術会議AIBT 2023において、Ratidar Technologies...

Python 実用コード - 無限分類ツリー構造生成アルゴリズム

バックエンド開発者にとっては、無限レベルの分類に強い印象を受けたのではないでしょうか。最初はかなり時...

...