我使用Keras创建了一个用于情感分析的机器学习模型,并使用flask创建了一个简单的API,如下代码所示。对于第一个预测,它可以正常工作并在结果页面中提供输出,但是当我再次尝试时,它给出了上面的错误。
我已经看到了一些类似的问题及其解决方案,但是这些解决方案对我不起作用。我也尝试了其他方法来保存和加载在keras上创建的模型,但无济于事。
#importing libraries
import os
import numpy as np
import flask
from flask import Flask, render_template, request
from keras.models import model_from_json, load_model
from sentiment_analysis import max_length, tokenizer_obj
from keras.preprocessing.text import Tokenizer
from keras.preprocessing.sequence import pad_sequences
import tensorflow as tf
import pickle
#creating instance of the class
app=Flask(__name__)
@app.route('/')
def welcome():
return flask.render_template('welcome.html')
#prediction function
def ValuePredictor(to_predict):
#to_predict = np.reshape(to_predict, (-1, len(to_predict)))
# json_file = open('model.json', 'r')
# loaded_model_json = json_file.read()
# json_file.close()
# loaded_model = model_from_json(loaded_model_json)
# # load weights into new model
# loaded_model.load_weights("model.h5")
model = pickle.load(open("model.pkl","rb"))
print("Loaded model from disk")
result = model.predict(to_predict)
tf.reset_default_graph()
return result
@app.route('/result',methods = ['POST'])
def result():
if request.method == 'POST':
to_predict_list = request.form.to_dict()
to_predict_list=list(to_predict_list.values())
test_tokens = tokenizer_obj.texts_to_sequences(to_predict_list)
test_pad = pad_sequences(test_tokens, maxlen = max_length, padding= 'post')
print(test_pad)
result = ValuePredictor(test_pad)
return render_template("result.html",prediction=result)
if __name__ == '__main__':
app.run(debug= True, port = 5000)
我希望输入文本,然后在结果页面中接收结果,然后返回主页并输入新文本,并获得另一个结果,依此类推。
当前,它第一次正常运行,然后在此之后的时间里给出错误。
答案 0 :(得分:0)
在代码中添加以下内容即可解决问题!
from keras import backend as K
K.clear_session()
我在预测后将其添加到这样的地方:
def ValuePredictor(to_predict):
model = pickle.load(open("model.pkl","rb"))
print("Loaded model from disk")
result = model.predict(to_predict)
K.clear_session()
return result