[PYTHON] Ich habe versucht, die Vorhersage-API des maschinellen Lernmodells von WordPress aus aufzurufen

Einführung

Neulich habe ich einen Artikel geschrieben Ich habe eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells mit Docker zurückgibt, aber ich kann den vorhergesagten Wert mit der API erhalten. Jetzt, da ich eine Vorhersage von einer Webseite machen möchte, habe ich sie mit Docker erstellt. Das Bild, das dieses Mal erstellt werden soll, ist in der folgenden Abbildung dargestellt.

D7DEB7E3-D41C-4632-9159-1681A1831A28.jpeg

Ich möchte drei Container in Docker einrichten, über einen lokalen Browser auf WordPress zugreifen und das Vorhersageergebnis mit WordPress überprüfen.

Umgebung

Die zu verwendende Umgebung ist wie folgt.

$sw_vers
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G9016

$docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
(Kürzung)
Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
(Kürzung)

Bauen

Ich denke, es gibt verschiedene Schritte, aber dieses Mal, nachdem wir WordPress erstellt haben, werden wir einen Container für die Vorhersage erstellen. Nach Bestätigung der Verbindung erstellen wir einen WordPress-Artikel und überprüfen den Vorgang.

Erstellen Sie WordPress

Bildaufnahme

Ruft das Container-Image ab, das zur Vorhersage von WordPress- und maschinellen Lernmodellen verwendet wird. Lesen Sie diesen Artikel [^ 1] und führen Sie die folgenden drei Befehle aus, um das Bild zu erhalten.

$ docker pull mysql:5.7.25
$ docker pull wordpress:4.9.1

Überprüfen Sie die mit dem Befehl docker images erhaltenen Bilder.

$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.25              98455b9624a9        7 months ago        372MB
wordpress           4.9.1               28084cde273b        22 months ago       408MB

Container-Start

Starten Sie die WordPress- und MySQL-Container. Lesen Sie hier [^ 2] und bauen Sie vor dem Start ein Netzwerk mit dem Befehl docker network auf.

$docker network create test-network

Bestätigen Sie, dass das Netzwerk mit dem folgenden Befehl erstellt wurde.

$docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
edbb6037a089        bridge              bridge              local
5f7c06763a14        host                host                local
1b7e419414a4        none                null                local
687f0232408b        test-network        bridge              local

Starten Sie den Container im erstellten Netzwerk.

$docker run --name mysql --network test-network -e MYSQL_ROOT_PASSWORD=test-pw -d mysql:5.7.25

$docker run --name wordpress --network test-network -e WORDPRESS_DB_PASSWORD=test-pw -v $(pwd)/vol:/mnt -p 8080:80 -d wordpress:4.9.1

Für WordPress stellt die Option -v ein lokales Verzeichnis mit dem Namen vol in / mnt im Container bereit. Dies liegt daran, dass das PHP-Skript, das später für die POST-Kommunikation mit der Vorhersage-API verwendet werden soll, lokal erstellt und im Container gespeichert wird. Ich habe auch die Option -p festgelegt, um den Port vorwärts zu setzen, um den lokalen Port 8080 an den Port 80 im Container weiterzuleiten.

Wenn Sie mit Ihrem lokalen Browser auf http: // localhost: 8080 zugreifen, wird der WordPress-Einstellungsbildschirm angezeigt. Legen Sie daher Ihre bevorzugte Sprache fest.

wordpress01.png

Legen Sie den Namen und das Kennwort des Administratorbenutzers fest. Sie müssen auch Ihre E-Mail-Adresse eingeben, aber es ist in Ordnung, wenn Sie sie entsprechend eingeben.

wordpress02.png

Klicken Sie auf die Schaltfläche "WordPress installieren" und ein Bildschirm für den Administrator wird angezeigt.

wordpress03.png

Wenn Sie zu diesem Zeitpunkt erneut mit Ihrem Browser auf http: // localhost: 8080 / zugreifen, wird eine elegante Seite angezeigt.

wordpress04.png

Dies ist das Ende der WordPress-Konstruktion. Der Teil, der auf die Vorhersage-API trifft, wird später festgelegt.

Aufbau eines API-Servers zur Vorhersage

Die Konstruktion ist wie in Ich habe eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells mit Docker zurückgibt beschrieben, daher werde ich sie weglassen, aber beim Starten des Containers Stellen Sie sicher, dass Sie das erstellte Netzwerk angeben.

$docker run -it --name test-api --network test-network --rm -p 5000:5000 -v $(pwd)/vol:/home myflask/mlapi:1.0 /bin/bash
root@b9e8ac7cdb71:/# cd home/
root@b9e8ac7cdb71:/home# python3 api.py 
Server is running ...
 * Serving Flask app "api" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 

Sie haben jetzt einen API-Server für die Vorhersage eingerichtet.

Klicken Sie auf die Vorhersage-API von WordPress

Verbindungsbestätigung

Stellen Sie sicher, dass bisher drei Docker-Container ausgeführt werden.

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b9e8ac7cdb71        myflask/mlapi:1.0   "/bin/bash"              8 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   test-api
c6b2f713a6a5        wordpress:4.9.1     "docker-entrypoint.s…"   17 minutes ago      Up 17 minutes       0.0.0.0:8080->80/tcp     wordpress
290950f0f643        mysql:5.7.25        "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       3306/tcp, 33060/tcp      mysql

Verwenden Sie im WordPress-Container den Befehl curl, um die Verbindung mit dem Vorhersage-API-Server zu überprüfen. Geben Sie den WordPress-Container mit dem Befehl docker exec ein und senden Sie die Vorhersagedaten mit dem Befehl curl.

$docker exec -i -t c6b2f713a6a5 /bin/bash
root@c6b2f713a6a5:/var/www/html# curl http://test-api:5000/predict -X POST -H 'Content-Type:application/json' -d '{"feature":{"season":[1], "year":[0], "month":[1], "hour":[0], "holiday":[0], "weekday":[6], "workingday":[0], "weather":[1], "temp":[0.24], "feelslike":[0.3], "humidity":[0.8], "windspeed":[0.0]}}'
{"Content-Type":"application/json","prediction":[34.67747315059312],"success":true}

Der vorhergesagte Wert ist 34,67 ..., daher scheint die Verbindung in Ordnung zu sein.

WordPress-Seitenerstellung

Fahren wir nun mit den WordPress-Einstellungen fort. Erstellen Sie eine neue feste Seite und füllen Sie den folgenden Inhalt aus. Außerdem sind die numerischen Auswahlmöglichkeiten für jedes Element auf Texto eingestellt.

<form action="/ml-submit.php" method="post">
season: <select name="season">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
year: <select name="year">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
month: <select name="month">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
hour: <select name="hour">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
holiday: <select name="holiday">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
weekday: <select name="weekday">
<option value=0>0</option>
<option value=1>1</option>
</select>
workingday: <select name="workingday">
<option value=0>0</option>
<option value=1>1</option>
</select>
weather: <select name="weather">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
temp(0-1): <input type="text" name="temp">
feelslike(0-1): <input type="text" name="feelslike">
humidity(0-1): <input type="text" name="humidity">
windspeed(0-1): <input type="text" name="windspeed">
<input class="submit" type="submit" value="Führen Sie php aus" /></form>

wordpress05.png

Wenn Sie nun auf Veröffentlichen klicken, wird die von Ihnen erstellte Seite angezeigt.

Erstellung von PHP-Skripten

Wenn Sie auf der erstellten Seite auf die Schaltfläche "Vorhersage" klicken, werden die Daten an die Vorhersage-API gesendet und das Vorhersageergebnis wird zurückgegeben und auf der Seite angezeigt. Erstellen Sie lokal eine PHP-Datei.

ml-submit.php


<?php

$data = array(
	'feature'=> array(
			  'season'=> array((int)$_POST['season']),
			  'year' => array((int)$_POST['year']),
			  'month' => array((int)$_POST['month']),
			  'hour' => array((int)$_POST['hour']),
			  'holiday' => array((int)$_POST['holiday']),
			  'weekday' => array((int)$_POST['weekday']),
			  'workingday' => array((int)$_POST['workingday']),
			  'weather' => array((int)$_POST['weather']),
			'temp' => array((float)$_POST['temp']),
			'feelslike' => array((float)$_POST['feelslike']),
			'humidity' => array((float)$_POST['humidity']),
			'windspeed' => array((float)$_POST['windspeed'])
	)
);
$data_json = json_encode($data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://test-api:5000/predict');
curl_setopt($ch, CURLOPT_PORT, 5000);
$result=curl_exec($ch);
$res_json = json_decode($result , true );
echo 'PREDICTION:'.$res_json['prediction'][0];
curl_close($ch);

echo "<br>aktualisieren:".date("Y/m/d H:i:s");

?>

Die auf der Webseite eingegebenen Daten werden im Array-Format gespeichert, in das JSON-Format konvertiert und dann an den Vorhersage-API-Server gesendet. Ich versuche, den vorhergesagten Wert des Rückgabewerts anzuzeigen. Informationen zum Erstellen von PHP finden Sie hier [^ 3]. Speichern Sie die lokal erstellte Datei im WordPress-Container. Speichern Sie PHP im vol-Verzeichnis.

$ls vol/ml-submit.php 
vol/ml-submit.php

Da das vol-Verzeichnis auf / mnt im Container bereitgestellt ist, kopieren Sie die Datei in das Verzeichnis, in dem PHP gespeichert ist.

root@c6b2f713a6a5:/var/www/html# cp /mnt/ml-submit.php .
root@c6b2f713a6a5:/var/www/html# ls
index.php      readme.html	wp-blog-header.php    wp-config.php  wp-includes	wp-login.php	 wp-signup.php
license.txt    wp-activate.php	wp-comments-post.php  wp-content     wp-links-opml.php	wp-mail.php	 wp-trackback.php
ml-submit.php  wp-admin		wp-config-sample.php  wp-cron.php    wp-load.php	wp-settings.php  xmlrpc.php

Der Bau ist bis zu diesem Punkt abgeschlossen.

Funktionsprüfung

Geben Sie nun den entsprechenden Wert auf der von WordPress erstellten Seite ein und klicken Sie auf die Schaltfläche "Vorhersagen".

wordpress07.png

Wenn Sie auf die Schaltfläche "Vorhersagen" klicken, wird der vorhergesagte Wert angezeigt. Yay.

wordpress08.png

Vorausgesagte Werte usw. werden auf einer leeren Seite angezeigt und es sieht schlecht aus, aber ich konnte sie anzeigen, indem ich auf die Vorhersage-API auf der Webseite geklickt habe.

schließlich

Ich konnte das Modell des maschinellen Lernens auf einer Webseite vorhersagen, die mit WordPress on Docker erstellt wurde. Es gibt noch einige Bereiche, in denen ich nicht genug studiert habe, und es sieht schlecht aus, aber dies ist ein Thema für die Zukunft. In Zukunft möchte ich es in einer Cloud wie AWS ausführen.

Recommended Posts

Ich habe versucht, die Vorhersage-API des maschinellen Lernmodells von WordPress aus aufzurufen
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich habe mit Docker eine API erstellt, die den vorhergesagten Wert des maschinellen Lernmodells zurückgibt
Ich habe versucht, das Modell mit der Low-Code-Bibliothek für maschinelles Lernen "PyCaret" zu visualisieren.
Bestimmen Sie die Authentizität von veröffentlichten Artikeln durch maschinelles Lernen (Google Prediction API).
Ich habe versucht, die beim maschinellen Lernen verwendeten Bewertungsindizes zu organisieren (Regressionsmodell).
Ich habe versucht, das Vorhandensein oder Nichtvorhandensein von Schnee durch maschinelles Lernen vorherzusagen.
Ich habe versucht, verschiedene Methoden für maschinelles Lernen (Vorhersagemodell) mithilfe von Scicit-Learn zu implementieren
Ich habe versucht, die API von Sakenowa Data Project zu verwenden
Ich habe versucht, das Bild mithilfe von maschinellem Lernen zu komprimieren
[CodeIQ] Ich habe die Wahrscheinlichkeitsverteilung von Würfeln geschrieben (aus dem CodeIQ-Mathematikkurs für maschinelles Lernen [Wahrscheinlichkeitsverteilung]).
Ich habe "Lobe" ausprobiert, mit dem das von Microsoft veröffentlichte Modell des maschinellen Lernens problemlos trainiert werden kann.
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Ich habe versucht, das CNN-Modell von TensorFlow mit TF-Slim umzugestalten
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
[Python] Ich habe versucht, Daten mit der API von Wikipedia zu sammeln
Ich habe versucht, verschiedene Informationen von der Codeforces-API abzurufen
Ich habe die Naro-Roman-API 2 ausprobiert
Ich habe maschinelles Lernen mit liblinear versucht
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
Passende App Ich habe versucht, Statistiken über starke Leute zu erstellen und ein Modell für maschinelles Lernen zu erstellen
Ein Beispiel für einen Mechanismus, der eine Vorhersage von HTTP aus dem Ergebnis des maschinellen Lernens zurückgibt
Ich habe versucht, die Yin- und Yang-Klassifikation hololiver Mitglieder durch maschinelles Lernen zu überprüfen
Ich habe die neuartige API von Naruro ausprobiert
Ich habe die Methode des maschinellen Lernens und ihre Implementierungssprache anhand der Tag-Informationen von Qiita betrachtet
Ich habe versucht, die checkio-API zu verwenden
Bewerten Sie die Genauigkeit des Lernmodells durch einen Kreuztest von scikit learn
Ich habe versucht, Othello AI mit Tensorflow zu machen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Einführung ~
[Qiita API] [Statistik • Maschinelles Lernen] Ich habe versucht, die bisher veröffentlichten Artikel zusammenzufassen und zu analysieren.
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Implementierung ~
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Notizen vom Anfang von Python 1 lernen
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
Ich habe versucht, die COTOHA-API zu berühren
Notizen vom Anfang von Python 2 lernen
Ich habe versucht, die BigQuery-Speicher-API zu verwenden
REST-API eines mit Python erstellten Modells mit Watson Machine Learning (CP4D-Edition)
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Ich habe die gängige Geschichte der Vorhersage des Nikkei-Durchschnitts mithilfe von Deep Learning (Backtest) ausprobiert.
Ich habe versucht, Othello AI mit Tensorflow zu erstellen, ohne die Theorie des maschinellen Lernens zu verstehen ~ Battle Edition ~
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ein Anfänger des maschinellen Lernens versuchte, mit Python ein Vorhersagemodell für Pferderennen zu erstellen
Überblick über maschinelle Lerntechniken, die aus Scikit-Learn gelernt wurden
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
Ich habe versucht, die Veränderung der Schneemenge für 2 Jahre durch maschinelles Lernen vorherzusagen
Ich habe versucht, das Bild zu verarbeiten und zu transformieren und die Daten für maschinelles Lernen zu erweitern
Implementierung eines Modells, das Wechselkurse (Dollar-Yen-Kurs) durch maschinelles Lernen vorhersagt
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!