我認為這是一個簡單的問題,但我有點卡在這里。
我正在嘗試在 Flask 中部署 keras 模型。我的主要建議是練習api。
但是每當我嘗試打開給定的本地主機 ID 時,我都會不斷收到此錯誤。
Not Found
The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.
我在代碼中遺漏了什么嗎?
我在下面提到了我的代碼:
from numpy.lib.twodim_base import tri
import pandas as pd
import numpy as np
import flask
from tensorflow.keras.models import load_model
import joblib
import csv
import codecs
import warnings
def warn(*arg, **kwargs):
pass
warnings.warn = warn
#initialize the flask application
app = flask.Flask(__name__)
#load the pre-trained model
def define_model():
global model
model = load_model('./model/anomaly_model.h5')
return print("Model is loaded")
limit = 10
@app.route("/submit", methods=["POST"])
def submit():
#initialize the data dictionary that will be returned in the response
data_out = {}
#load the data file from our endpoint
if flask.request.method == "POST":
#read the data file
file = flask.request.files['data_file']
if not file:
return "No file submitted"
data = []
stream, = codecs.iterdecode(file.stream, 'utf-8')
for row in csv.reader(stream, dialect=csv.excel):
if row:
data.append(row)
#convert input data to pandas dataframe
df = pd.DataFrame(data)
df.set_index(df.iloc[:, 0], inplace=True)
df2 = df.drop(df.columns[0], axis=1)
df2 = df2.astype(np.float64)
#normalize the data
scaler = joblib.load('./data/combined.csv')
X = scaler.transform(df2)
X = X.reshape(X.shape[0], 1, X.shape[1])
data_out['Analysis'] = []
preds = model.predict(X)
preds = preds.reshape(preds.shape[0], preds.shape[2])
preds = pd.DataFrame(preds, columns=df2.columns)
preds.index = df2.index
scored = pd.DataFrame(index=df2.index)
yhat = X.reshape(X.shape[0], X.reshape[2])
scored['Loss_mae'] = np.mean(np.abs(yhat - preds), axis=1)
scored['Threshold'] = limit
scored['Anomaly'] = scored['Loss_mae'] > scored['threshold']
print(scored)
#determine of an anomaly was detected
triggered = []
for i in range(len(scored)):
temp = scored.iloc[i]
if temp.iloc[2]:
triggered.append(temp)
print(len(triggered))
if len(triggered) > 0:
for j in range(len(triggered)):
out = triggered[j]
result = {"Anomaly": True, "Value":out[0], "filename":out.name}
data_out["Analysis"].append(result)
else:
result = {"Anomaly":"No Anomalies Detected"}
data_out["Analysis"].append(result)
print(data_out)
return flask.jsonify(data_out)
if __name__ == "__main__":
print(("* Loading the Keras model and starting the server ...."
"Please wait until the server has fully started before submitting"))
define_model()
app.run(debug=True)
實際上我是 Flask 的新手。這是我的第一次嘗試。我也嘗試給 app.run(host='0.0.0.0') 但對我不起作用。我可以得到一些幫助嗎???
這是來自終端的日志:
* Loading the Keras model and starting the server ....Please wait until the server has fully started before submitting
2021-12-27 16:29:45.158086: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model is loaded
* Serving Flask app 'implimentation' (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: on
* Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
* Restarting with stat
* Loading the Keras model and starting the server ....Please wait until the server has fully started before submitting
2021-12-27 16:29:49.283527: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
Model is loaded
Model is loaded
* Debugger is active!
* Debugger PIN: 114-980-010
127.0.0.1 - - [27/Dec/2021 16:05:37] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:38] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:53] "GET / HTTP/1.1" 404 -
127.0.0.1 - - [27/Dec/2021 16:05:56] "GET / HTTP/1.1" 404 -
希望得到一些幫助
謝謝
uj5u.com熱心網友回復:
您應該嘗試更改@app.route("/submit", methods=["POST"])為@app.route("/", methods=["POST"]). 也就是說,洗掉submit. 運行程式時,默認位置是http://127.0.0.1:5000/,但您正在嘗試訪問http://127.0.0.1:5000/submit。
要么每次訪問http://127.0.0.1:5000/submit,要么去掉url中的submit,這樣更方便,每次都訪問默認位置。
這個答案非常相似。
uj5u.com熱心網友回復:
這取決于你想要什么。
您擁有的唯一路線是/submitPOST 路線。
您收到該錯誤是因為您正在訪問/(GET) 路由而不是/submit(POST)
添加一條新路由以查看您的服務器啟動并運行
@app.route("/")
def home():
return 'home'
或使用郵遞員等工具,將/submit路由作為 POST 請求命中。
還要記住埠是 5000。
uj5u.com熱心網友回復:
/submit 端點不是您可以通過鍵入 http://localhost:5000/submit 來訪問的常規 GET 請求。
它顯然期待檔案上傳。使用上傳檔案按鈕制作一個虛擬前端,或使用 Postman 創建帶有必要標志的 Post 請求以上傳檔案,當然,提供檔案路徑
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/395539.html
