Gradio部署ML模型后输入触发输出错误,求解决方案
解决Gradio部署回归模型的输出错误问题
常见错误原因及修复方案
1. 输入数据类型不匹配
Gradio的Number组件若接收到非数值输入(比如空值、字符串),会导致scaler.transform执行报错。可以在预测函数中添加数值校验逻辑,同时优化输出格式:
def predict_sales(tv, radio, newspaper): # 校验并转换输入为数值类型 try: tv = float(tv) radio = float(radio) newspaper = float(newspaper) except ValueError: return "请输入有效的数值" input_features = scaler.transform([[tv, radio, newspaper]]) prediction = lm.predict(input_features) return round(prediction[0], 2) # 保留两位小数,提升输出可读性
2. 输入范围无限制导致异常预测
如果输入数值超出训练数据的特征范围,即使不会报错,预测结果也可能偏离预期。可以给输入组件设置合理的范围和默认值:
tv_input = gr.Number(label="TV", value=100, minimum=0, maximum=300) radio_input = gr.Number(label="Radio", value=20, minimum=0, maximum=50) newspaper_input = gr.Number(label="Newspaper", value=30, minimum=0, maximum=100)
3. 改用Blocks模式提升稳定性
部分Gradio版本中Interface模式可能存在兼容性问题,改用Blocks模式构建界面更灵活稳定:
import gradio as gr import numpy as np from sklearn.linear_model import LinearRegression from sklearn.preprocessing import MinMaxScaler # 数据与模型训练逻辑不变 X_train = np.array([[230.1, 37.8, 69.2], [44.5, 39.3, 45.1], [17.2, 45.9, 69.3], [151.5, 41.3, 58.5], [180.8, 10.8, 58.4]]) y_train = np.array([22.1, 10.4, 9.3, 18.5, 12.9]) scaler = MinMaxScaler() scaler.fit(X_train) X_train_scale = scaler.transform(X_train) lm = LinearRegression() lm.fit(X_train_scale, y_train) def predict_sales(tv, radio, newspaper): try: tv = float(tv) radio = float(radio) newspaper = float(newspaper) except ValueError: return "请输入有效的数值" input_features = scaler.transform([[tv, radio, newspaper]]) prediction = lm.predict(input_features) return round(prediction[0], 2) with gr.Blocks(title="销售额预测") as demo: gr.Markdown("# 销售额预测") gr.Markdown("输入广告投入费用,预测销售额") with gr.Row(): tv = gr.Number(label="TV广告费用", value=100, min=0) radio = gr.Number(label="Radio广告费用", value=20, min=0) newspaper = gr.Number(label="Newspaper广告费用", value=30, min=0) output = gr.Textbox(label="预测销售额") btn = gr.Button("预测") btn.click(predict_sales, inputs=[tv, radio, newspaper], outputs=output) demo.launch(debug=True, enable_queue=True)
4. 生产环境模型与缩放器配套保存
如果后续要将模型部署到生产环境,需确保模型与缩放器配套保存加载,避免单独加载模型导致的特征不匹配问题:
import joblib # 保存 joblib.dump(lm, "linear_regression_model.pkl") joblib.dump(scaler, "minmax_scaler.pkl") # 加载 lm = joblib.load("linear_regression_model.pkl") scaler = joblib.load("minmax_scaler.pkl")
内容的提问来源于stack exchange,提问作者NILESH NALAWADE
相关产品推荐
相关产品推荐

