首先,我是机器学习的新手。 我正在尝试创建一个 REST API,它利用带有 Flask 的机器学习模型。
应用程序 当用户在文本框中输入速度值并按下按钮时,他们将获得由风速产生的预测功率。 我已经创建了模型并将其导入到网络服务中。
问题 当我输入一个值并按下按钮时,我收到以下错误“索引 0 超出了轴 0 的范围,大小为 0”。
我用谷歌搜索了 NumPy.amax() 并找不到任何有用的东西我也在互联网上搜索了几个小时寻找答案,但找不到任何东西。
请参阅下面的模型代码和下面的网络服务代码:
提前感谢您的帮助。
型号代码
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.python.keras import utils
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
COLUMN_NAMES = ['Speed', 'Power']
df = pd.read_csv(
"https:///powerproduction.csv",
names = COLUMN_NAMES, header = 0 )
X = dataset[:,0:1]
Y = dataset[:,1]
min_max_scaler = preprocessing.MinMaxScaler()
X_scale = min_max_scaler.fit_transform(X)
X_train, X_val_and_test, Y_train, Y_val_and_test = train_test_split(X_scale, Y, test_size=0.3)
X_val, X_test, Y_val, Y_test = train_test_split(X_val_and_test, Y_val_and_test, test_size=0.5)
print(X_train.shape, X_val.shape, X_test.shape, Y_train.shape, Y_val.shape, Y_test.shape)
model = Sequential([
Dense(32, activation='relu', input_shape=(1,)),
Dense(32, activation='relu'),
Dense(1, activation='sigmoid'),])
model.compile(optimizer='sgd',
loss='binary_crossentropy',
metrics=['accuracy'])
hist = model.fit(X_train, Y_train,
batch_size=32, epochs=200,
validation_data=(X_val, Y_val))
scores = model.evaluate(X_test, Y_test)[1]
model.save('model.h5')
print("Saved model" )
网络服务
# adapted from: https://flask.palletsprojects.com/en/1.1.x/quickstart/#a-minimal-application
from flask import Flask, request, jsonify, render_template
import tensorflow as tf
import numpy as np
from tensorflow.keras import backend
from tensorflow.keras.models import load_model
app = Flask(__name__)
@app.before_first_request
def load_model_to_app():
app.predictor = load_model('model.h5')
@app.route('/')
def index():
return render_template('index.html', pred=0)
@app.route('/predict', methods=['POST'])
def predict():
data = [request.form['speed']]
data = np.array([np.asarray(data, dtype=float)])
predictions = app.predictor.predict(data)
print('INFO Predictions: {}'.format(predictions))
class_ = np.where(predictions == np.amax(predictions, axis=1))[1][0]
return render_template('index.html', pred=class_)
def main():
"""Run the app."""
app.run(host='0.0.0.0', port=8000, debug=False) # nosec
if __name__ == '__main__':
main()