Streamlit应用界面显示NONE,终端输出预测结果求助
问题原因
你的prediction函数仅通过print()将预测结果输出到终端,没有返回任何值。当你调用result = prediction([strain,plNr])时,函数默认返回None,这就是界面显示NONE的原因。
修复方案
只需给prediction函数添加返回语句,让它把模型的预测值传递回主函数即可:
步骤1:修改prediction函数
将函数内的print(prediction)替换为返回语句,考虑到模型返回的是二维数组(如[[0.42784861]]),可以直接返回数组内的数值,让界面显示更直观:
def prediction(input_data): input_data_numpy= np.asarray(input_data) input_data_reshape=input_data_numpy.reshape(1,-1) prediction_result=loaded_model.predict(input_data_reshape) # 返回二维数组中的具体数值 return prediction_result[0][0]
(注:这里把变量名从prediction改成prediction_result,避免和函数名重名造成混淆)
步骤2:优化界面展示(可选)
如果需要保留终端打印,可以在返回前添加print(prediction_result),同时格式化结果让界面展示更友好:
if st.button("result"): pred_value = prediction([strain,plNr]) result = f"预测数量:{pred_value:.2f}"
完整修复后的代码
import pickle import numpy as np import streamlit as st loaded_model=pickle.load(open("C:/trained_model.sav",'rb')) def prediction(input_data): input_data_numpy= np.asarray(input_data) input_data_reshape=input_data_numpy.reshape(1,-1) prediction_result=loaded_model.predict(input_data_reshape) print(prediction_result) # 保留终端输出 return prediction_result[0][0] def main(): st.title("Predict quantity") strain = st.radio("strain:",("cereal","sugar","salt")) plNr=st.slider('Number of plants:', 10, 2340, 25) result = "" if strain == "cereal": strain = 1 elif strain == "sugar": strain = 2 else: strain = 3 if st.button("result"): pred_value = prediction([strain,plNr]) result = f"预测数量:{pred_value:.2f}" st.success(result) if __name__ =="__main__": main()
内容的提问来源于stack exchange,提问作者Stetco Oana
相关产品推荐
相关产品推荐

