[PYTHON] [Flask + Keras] So schließen Sie mehrere Modelle mit hoher Geschwindigkeit auf dem Server ab

Fazit

keras==2.2.4 tensorflow=1.14.0 numpy==1.16.4

Testcode

from flask import Flask
import time

import numpy as np
import tensorflow as tf
from keras.models import load_model
from keras.preprocessing.image import img_to_array, load_img

app = Flask(__name__)

model_path1 = "mnist.h5"
model1 = load_model(model_path1)
label1 = ["l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", "l8", "l9"]
model1._make_predict_function()#<Sehr wichtig> Beschleunigung vorhersagen
graph1 = tf.get_default_graph()


model_path2 = "mnist.h5"
model2 = load_model(model_path2)
label2 = ["l0", "l1", "l2", "l3", "l4", "l5", "l6", "l7", "l8", "l9"]
model2._make_predict_function()
graph2 = tf.get_default_graph()

def model1_predict(img_path):
    img = img_to_array(load_img(img_path, target_size=(28, 28), grayscale=True))
    img_nad = img_to_array(img) / 255
    img_nad = img_nad[None, ...]
    global graph1
    with graph1.as_default():
        pred = model1.predict(img_nad, batch_size=1, verbose=0)
    score = np.max(pred)
    pred_label = label1[np.argmax(pred[0])]
    print("Ergebnis:", score, "Etikette:", pred_label)

def model2_predict(img_path):
    img = img_to_array(load_img(img_path, target_size=(28, 28), grayscale=True))
    img_nad = img_to_array(img) / 255
    img_nad = img_nad[None, ...]
    global graph2
    with graph2.as_default():
        pred = model2.predict(img_nad, batch_size=1, verbose=0)
    score = np.max(pred)
    pred_label = label2[np.argmax(pred[0])]
    print("Ergebnis:", score, "Etikette:", pred_label)

@app.route("/", methods=['GET', 'POST'])
def webapp():
    start1 = time.time()
    model1_predict("mnist_test.jpg ")
    end1 = time.time()-start1
    print("Verarbeitungszeit<model1>: ", end1, "Sekunden")

    start2 = time.time()
    model2_predict("mnist_test.jpg ")
    end2 = time.time() - start2
    print("Verarbeitungszeit<model2>: ", end2, "Sekunden")

    output = "<p>model1:"+str(round(end1, 3))+"Sekunden</p><br><p>model2:"+str(round(end2, 3))+"Sekunden</p>"
    return output

if __name__ == "__main__":
    app.run(port=5000, debug=False)

Wichtiger Teil

model1 = load_model(model_path1)
model1._make_predict_function()#<Sehr wichtig> Beschleunigung vorhersagen
graph1 = tf.get_default_graph()

def model1_predict():
    global graph1
    with graph1.as_default():
        pred = model1.predict(***, batch_size=1, verbose=0)

Recommended Posts

[Flask + Keras] So schließen Sie mehrere Modelle mit hoher Geschwindigkeit auf dem Server ab
So erstellen Sie große Dateien mit hoher Geschwindigkeit
Ein Hinweis zum Überprüfen der Verbindung zum Lizenzserver-Port
[Python] Wie man den Bruchteil einer natürlichen Zahl mit hoher Geschwindigkeit erhält
So stellen Sie die Serverzeit auf japanische Zeit ein
[Python] So speichern Sie Bilder mit Beautiful Soup sofort im Web
So weisen Sie der Matplotlib-Farbleiste mehrere Werte zu
So machen Sie mehrere Kernel auf Jupyter auswählbar
So messen Sie die Leitungsgeschwindigkeit vom Terminal aus
Überlegen Sie, wie Sie Python auf Ihrem iPad programmieren können
PostgreSQL - Für Sie, die mit hoher Geschwindigkeit EINFÜGEN möchten
Wie man Python auf Android genießt !! Programmieren für unterwegs !!
So führen Sie Django unter IIS auf einem Windows-Server aus
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django
Verwendung von GitHub auf einem Server für mehrere Personen ohne Kennwort
So erhöhen Sie die Verarbeitungsgeschwindigkeit der Erfassung der Scheitelpunktposition
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
So stellen Sie Pybot, das einfachste Python-Lehrbuch, auf Heroku bereit
Wie man mit Pythons Selen in Sekundenschnelle kratzt
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
Das Problem, dass der Webserver von Flask nicht nach außen veröffentlicht werden kann [VScode]
So drucken Sie Zeichen auf der Konsole, bevor Sie in ARM starten