[PYTHON] Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API

Inhalt dieser Zeit

Dies ist die zweite Ausgabe von Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung. Stellt Klassifizierungsergebnisse für maschinelles Lernen über die Web-API zur Verfügung.

Zu diesem Zeitpunkt war es nicht wirklich nicht programmiert und es begann sich um einen Titelbetrug zu handeln, aber es sind nur 60 Codezeilen, daher denke ich nicht, dass es schwer zu lesen ist.

Die Quelle ist unter https://github.com/shuukei-imas-cg/imas_cg_words verfügbar.

Über das zu verwendende Framework und die zu verwendende Software

Falcon Falcon ist ein sehr schnelles und minimalistisches Webframework für Backend-Anwendungen. Laut dem auf der offiziellen Website veröffentlichten Benchmark ist er als Webframework für Python neunmal leistungsfähiger als der Standardflask (0.11.1). Diesmal ist es eine große Sache, also mache ich Cythonize und richte es so ein, dass es schneller läuft.

Gunicorn Gunicorn ist ein einfacher und schneller WSGI-Webserver, der von Falcon empfohlen wird. WSGI steht für Web Server Gateway Interface und ist eine standardisierte Schnittstellendefinition für Webserver und Web Frameworks. Wenn Sie dies befolgen, können Sie es mit Ihrer bevorzugten Kombination aus Webserver und Webanwendung (Framework) verwenden.

Beispielausführungsverfahren

 cd imas_cg_words / (Verzeichnis im vorherigen Artikel geklont)
git pull

# Installieren Sie Gunicorn, Cython
pip install cython gunicorn
# Installieren Sie beim Kompilieren von Falcon mit dem C-Compiler
pip install --no-binary :all: falcon 

# Starten Sie den Webapi-Server auf localhost
cd webapi/
python server.py &
# Abfrage
 Curl http: // localhost: 8080 / imas_cg-words / v1 / Predict / Delusion
[
    {
        "score": 1.2635555267333984,
 "name:": "Hinako Kita"
    },
    {
        "score": -0.9001807570457458,
 "name:": "Aiumi Munakata"
    },
    {
        "score": -1.0048713684082031,
 "name:": "Nanami Asari"
    }
]

Wenn Sie eine Abfrage mit Curl auslösen und diese wie oben angezeigt wird, funktioniert sie ordnungsgemäß. Empfängt beliebigen Text mit der HTTP-GET-Methode und gibt das Klassifizierungsergebnis im JSON-Format zurück.

Beim Veröffentlichen als Web-API, die von außen verwendet werden kann

Wenn Sie als Web-API veröffentlichen, auf die von außen zugegriffen werden kann, reicht simple_server nicht aus. Verwenden Sie Gunicorn daher wie folgt. Beachten Sie, dass beim Booten von Gunicorn die in config.py festgelegte IP-Adresse und Portnummer ignoriert werden und die in den Befehlszeilenoptionen angegebenen Werte Vorrang haben.

 gunicorn -b (IP-Adresse) :( Portnummer) Server: API &
# Bei Angabe der Anzahl der Worker und der Protokolldatei
 gunicorn -w 4 -b (IP-Adresse) :( Portnummer) --access-logfile log / access.log --error-logfile log / error.log server: api &

Geben Sie für die IP-Adresse eine IP-Adresse an, auf die von außen verwiesen werden kann.

Kommentar

Ich werde den Inhalt von webapi / server.py erklären.

Erstellen Sie zunächst eine Instanz von Falcon und konfigurieren Sie das Routing so, dass die Klasse PredictSerif dem Pfad des URI zugewiesen wird. Der Teil {words} kann einen beliebigen Wert annehmen und sein Inhalt wird als Variable an die Klasse oder Funktion übergeben.

# Add route
api = falcon.API()
api.add_route('/imas_cg-words/v1/predict/{words}', PredictSerif())

Predict Serif definiert das Verhalten der HTTP-GET-Methode. Der Inhalt der Funktionsvorhersage entspricht fast dem [zuvor] erstellten (http://qiita.com/shuukei-imas-cg/items/ea501e62970b309ceea4). Der Rückgabewert wird in das JSON-Format konvertiert und als Ausgabe von WebAPI angezeigt.

_add_headers fügt einige HTTP-Header hinzu. Im nächsten Artikel werden wir CORS vorerst zulassen, um über JavaScript von SPA aus auf diese Web-API zuzugreifen.

class PredictSerif(object):
    def on_get(self, req, resp, words):
        result = predict(words)
        json_out = json.dumps(result, indent=4, ensure_ascii=False)
        _add_headers(resp)
        resp.body = json_out
        resp.status = falcon.HTTP_200
        logging.info("predict {0} {1}".format(req.remote_addr, words.decode('utf-8')))

Einrückung = 4 in json.dumps ist zur besseren Lesbarkeit festgelegt. Sie können es in der Produktion löschen.

nächstes Mal

Sie können jetzt die Klassifizierungsfunktion für maschinelles Lernen als Web-API verwenden. Nächstes Mal werde ich ein Frontend erstellen, das diese Web-API mit Vue.js verwendet.

Schließlich (wichtig)

Wenn Ihnen dieser Artikel gefällt, wird er um den April 2018 bei Idol Master Cinderella Girls stattfinden, so viel Sie für gut halten. Bitte stimmen Sie für Hinako Kita bei der "7. Cinderella Girl General Election", die stattfinden wird.

Recommended Posts

Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Web-API
Ich möchte einen maschinellen Lerndienst ohne Programmierung erstellen! Textklassifizierung
Ich möchte maschinelles Lernen auch ohne Server durchführen - Time Series Edition -
Ich möchte einfach ein Rauschmodell erstellen
Ich möchte mit Python ein Fenster erstellen
Ich möchte eine Art von Implementierung erstellen, die angeschlossen werden kann
Ich möchte mit verstärkendem Lernen einen Berg besteigen
Ich möchte manuell eine Legende mit matplotlib erstellen
Erstellen eines Gesichtsbilddatensatzes für maschinelles Lernen (1: Erfassen von Kandidatenbildern mithilfe des Web-API-Dienstes)
Ich möchte vorerst eine Docker-Datei erstellen.
Passende App Ich habe versucht, Statistiken über starke Leute zu erstellen und ein Modell für maschinelles Lernen zu erstellen
Qiskit: Ich möchte eine Schaltung erstellen, die beliebige Zustände erzeugt! !!
Ich möchte ein System erstellen, um zu verhindern, dass vergessen wird, den Schlüssel 1 festzuziehen
Ich möchte eine Pipfile erstellen und im Docker wiedergeben
So erstellen Sie mit AWS Lambda eine serverlose API für maschinelles Lernen
Ich möchte in der Einschlussnotation drucken
Ich habe versucht, einen Linebot zu erstellen (Vorbereitung)
Ich möchte eine Python-Umgebung erstellen
Ich wechselte meinen Job zu einem Ingenieur für maschinelles Lernen bei AtCoder Jobs
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte einen DataFrame in MSSQL einfügen
Ich möchte ein Spiel mit Python machen
Wenn Sie Word Cloud erstellen möchten.
Ich möchte keinen Codierungstest machen
Ich möchte leicht einen leckeren Laden finden
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Django-App auf Heroku hochladen
Ich möchte eine schöne Python-Entwicklungsumgebung für meinen neuen Mac erstellen
Ich möchte eine Prioritätswarteschlange erstellen, die mit Python (2.7) aktualisiert werden kann.
[Python] Deep Learning: Ich habe versucht, Deep Learning (DBN, SDA) ohne Verwendung einer Bibliothek zu implementieren.
[Azure] Ich habe versucht, eine virtuelle Linux-Maschine mit Azure von Microsoft Learn zu erstellen
Ich möchte eine WEB-Anwendung mit den Daten von League of Legends ① erstellen
Ein Anfänger des maschinellen Lernens versuchte an einem Tag, eine Sheltie-Urteils-KI zu erstellen
Ich habe versucht, die Lernfunktion im neuronalen Netzwerk sorgfältig zu verstehen, ohne die Bibliothek für maschinelles Lernen zu verwenden (erste Hälfte).
Erstellen Sie einen Datensatz mit Bildern, die für das Training verwendet werden sollen
[Keras] Ich habe versucht, das Problem der Klassifizierung des Donut-Typ-Bereichs durch maschinelles Lernen zu lösen. [Studie]
Ich habe versucht, maschinelles Lernen (Objekterkennung) mit TouchDesigner zu verschieben
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte, dass DQN Puniki einen Homerun macht
100 Klopfen bei der Bildverarbeitung !! (021-030) Ich möchte eine Pause machen ...
Ich habe versucht, mit Python Machine Learning ein Echtzeit-Modell zur Trennung von Tonquellen zu erstellen
Ich möchte einem Pandas-Datenrahmen eine group_id geben
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich möchte mit einem Knopf am Kolben übergehen
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte ein beliebtes Paket auf PyPi finden
Ich möchte eine Datei mit Python zufällig testen
Ich möchte einfach eine modellbasierte Entwicklungsumgebung erstellen
Ich habe versucht, mit Open AI Gym eine verbesserte Lernumgebung für Othello zu schaffen
Ich möchte eine Zeichenkette mit Hiragana teilen
Vorbereitung zum Starten von "Python Machine Learning Programming" (für macOS)
Ich möchte zum ersten Mal eine Django-Studie zur Mittagsdatenbank [EP1] erstellen
Ich möchte zum ersten Mal eine Django-Studie zum Mittagessen [EP1-4] erstellen
[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Anfänger des maschinellen Lernens versuchen, einen Entscheidungsbaum zu erstellen
Ich möchte automatisch eine Unternehmensgründungs-E-Mail senden
Ich möchte einen Quantencomputer mit Python betreiben
Einführung in das maschinelle Lernen
Ich möchte eine lokale Variable mit Lambda binden