Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Google应用程序引擎:无法使用keras/tensorflow/flask加载资源_Python_Tensorflow_Google App Engine_Flask_Keras - Fatal编程技术网

Python Google应用程序引擎:无法使用keras/tensorflow/flask加载资源

Python Google应用程序引擎:无法使用keras/tensorflow/flask加载资源,python,tensorflow,google-app-engine,flask,keras,Python,Tensorflow,Google App Engine,Flask,Keras,我目前正在使用tensorflow/keras和flask开发一个机器学习web应用程序。对于部署,我使用谷歌应用程序引擎(GAE) 在本地,我可以运行我的应用程序,通过UI获取一些数据,并使用我的旧模型显示预测(共有四个,都是.h5文件) 我可以在GAE上部署它,没有任何错误,但当我在浏览器中输入链接时,我会出现“502坏网关”错误,当我检查浏览器(Chrome)时,我会看到三条错误消息,说“加载资源失败” 我是网络开发新手,所以我不完全了解问题所在。我需要在.yaml文件中声明我的模型还是专

我目前正在使用tensorflow/keras和flask开发一个机器学习web应用程序。对于部署,我使用谷歌应用程序引擎(GAE)

在本地,我可以运行我的应用程序,通过UI获取一些数据,并使用我的旧模型显示预测(共有四个,都是.h5文件)

我可以在GAE上部署它,没有任何错误,但当我在浏览器中输入链接时,我会出现“502坏网关”错误,当我检查浏览器(Chrome)时,我会看到三条错误消息,说“加载资源失败”

我是网络开发新手,所以我不完全了解问题所在。我需要在.yaml文件中声明我的模型还是专门加载它们

My.yaml文件:

env: flex
runtime: python
runtime_config:
    python_version: 3
My main.py文件:

import pandas as pd
import tensorflow as tf
from keras.models import load_model
from keras.backend import set_session
from utils import instagram_scraper
from utils import image_preprocessing
from utils import label_encoding
from utils import overall_class_label
from sklearn.preprocessing import LabelEncoder

global sess
global graph
sess = tf.compat.v1.Session()
graph = tf.compat.v1.get_default_graph()
tf.compat.v1.keras.backend.set_session(sess) 
num_attributes = 4
model = [[] for i in range(num_attributes)]
model[0] = load_model('./model/savemodels/glamorous_model.h5')
model[1] = load_model('./model/savemodels/rugged_model.h5')
model[2] = load_model('./model/savemodels/fun_model.h5')
model[3] = load_model('./model/savemodels/healthy_model.h5')

app = Flask(__name__)


def data_collection(brandname):
    url = 'https://www.instagram.com/'+brandname+'/?hl=en'
    scraper = instagram_scraper.InstagramScraper()
    official_images = scraper.profile_page_posts(url)
    return official_images


def data_preprocessing(official_images):
    preprocessed_data = image_preprocessing.preprocessing(official_images)
    return preprocessed_data


def make_prediction(preprocessed_data):
    X_test = preprocessed_data

    with graph.tf.compat.v1.as_default():
        tf.compat.v1.keras.backend.set_session(sess)
        y_pred = [[] for i in range(num_attributes)]
        for i in range(num_attributes):
            y_pred[i] = model[i].predict(X_test)
        y_pred_label = overall_class_label.give_ovr_class_label_output(y_pred)

    # convert from encoded label to label name
    # encoded label
    y_pred_lst = y_pred_label.tolist()
    # map back to original label name
    code2label = {0: 'glamorous', 1: 'rugged', 2: 'fun', 3: 'healthy'}
    y_pred_lbnm = map(code2label.get, y_pred_lst)
    y_pred_lbnm = list(y_pred_lbnm)
    prediction = pd.Series(y_pred_lbnm).value_counts()
    return prediction


@app.route("/", methods=["POST", "GET"])
def index():
    if request.method == "POST":
        brandname = request.form["brandname"]
        return redirect(url_for("predict", brandname=brandname))
    else:
        return render_template("index.html")


@app.route("/predict/<brandname>", methods=["POST", "GET"])
def predict(brandname):
    official_images = data_collection(brandname)
    preprocessed_data = data_preprocessing(official_images)
    prediction = make_prediction(preprocessed_data)
    return render_template("predict.html", prediction=prediction)


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080, debug=True)
非常感谢您的帮助,谢谢! 祝你一切顺利,
斯诺

我理解您的担忧。502错误可能是由多种原因造成的。要获得更多信息,请从云控制台共享502错误的Stackdriver日志。嗨,Nibrass,感谢您的回复!当我现在尝试部署它时,它告诉我超出了配额。所以我没有访问日志文件的权限。是否可能.h5文件太大,无法及时从浏览器获得响应?它们每个大约有150MB。如果有人知道如何在Microsoft Azure上部署这样的应用程序,我非常乐意在那里尝试:)我能够成功地将同一个应用程序从本地git repo部署到远程azure repo,但当我单击URL时,我得到一个错误“503服务暂时不可用”。据我所知,我需要通过本地git repo来完成,因为我使用的模型太大,无法上传到GitHub(有四种型号,每种大约190MB)。对吗?您好,我理解您的担忧。正如错误所述,您试图加载太多资源或文件太多。请您分享完整的错误,看看是否是由于我之前所说的原因造成的。如果是这种情况,您需要打开谷歌云平台支持票证,并要求提高您的支持率AppEngine的配额是灵活的,但首先,正如我所说的,请分享完整的错误?我理解您的担忧。502错误可能是由许多原因造成的。要获得更多信息,请您从云控制台分享502错误的Stackdriver日志。嗨,Nibrass,感谢您的回复!当我现在尝试部署它时,请立即使用它告诉我已超过配额。因此,我无法访问日志文件。是否有可能.h5文件太大,无法及时从浏览器获得响应?每个文件约为150MB。如果有人知道如何在Microsoft Azure上部署此类应用程序,我非常乐意在那里尝试:)我能够成功地将同一应用程序从本地git repo部署到远程azure repo,但当我单击URL时,我得到一个错误“503服务暂时不可用”。据我所知,我需要通过本地git repo进行部署,因为我使用的模型太大,无法上载到GitHub(有四个模型,每个大约190MB)。是吗?嗨,我理解你的担心。正如错误所提到的,您试图加载太多的资源,或者您有很多文件。请你分享一下完整的错误,看看是否是由于我之前所说的?如果是这样的话,你需要打开一张谷歌云平台支持票,要求增加你的appengine Flexible配额,但首先,正如我所说的,请分享完整的错误?
parent
 --model
   --savemodels
     fun_model.h5
     glamorous_model.h5
     healthy_model.h5
     rugged_model.h5
 --static
     style.css
 --templates
     index.html
     predict.html
 --utils
     image_preprocessing.py
     instagram_scraper.py
     label_encoding.py
     overall_class_label.py
 app.yaml
 main.py
 requirements.txt