[Flask + Keras] Comment déduire plusieurs modèles à grande vitesse sur le serveur

Conclusion

keras==2.2.4 tensorflow=1.14.0 numpy==1.16.4

Code de test

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()#<Très important> Accélérer la prévision
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("But:", score, "étiquette:", 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("But:", score, "étiquette:", pred_label)

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

    start2 = time.time()
    model2_predict("mnist_test.jpg ")
    end2 = time.time() - start2
    print("temps de traitement<model2>: ", end2, "Secondes")

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

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

Partie importante

model1 = load_model(model_path1)
model1._make_predict_function()#<Très important> Accélérer la prévision
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] Comment déduire plusieurs modèles à grande vitesse sur le serveur
Comment créer des fichiers volumineux à haute vitesse
Remarque sur la façon de vérifier la connexion au port du serveur de licences
[Python] Comment obtenir la fraction d'un nombre naturel à grande vitesse
Comment régler l'heure du serveur sur l'heure japonaise
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Comment attribuer plusieurs valeurs à la barre de couleurs Matplotlib
Comment rendre plusieurs noyaux sélectionnables sur Jupyter
Comment mesurer la vitesse de la ligne depuis le terminal
Réfléchissez à la programmation de Python sur votre iPad
PostgreSQL - Pour vous qui voulez INSÉRER à grande vitesse
Comment profiter de Python sur Android !! Programmation en déplacement !!
Comment exécuter Django sur IIS sur un serveur Windows
Comment enregistrer les mêmes données plusieurs fois avec une seule entrée sur l'écran de gestion de Django
Comment utiliser GitHub sur un serveur multi-personnes sans mot de passe
Comment augmenter la vitesse de traitement de l'acquisition de la position des sommets
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
Comment gratter en quelques secondes avec le sélénium de Python
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas
Le problème selon lequel le serveur Web de Flask ne peut pas être publié vers l’extérieur [VScode]
Comment imprimer des caractères sur la console avant de démarrer dans ARM