Conv1D神经网络预测结果传入Dash生成图表报TypeError问题求助
问题根因排查
- 核心错误1:Dash回调参数不匹配
你定义的回调仅传入1个输入参数(下拉框选中值),但update_figure函数声明了3个参数,多出来的X_countyname、y_countyname未在回调的Input/State中声明,Dash传递参数时出现类型不匹配,最终触发Keras底层运算时的格式化报错。 - 错误2:缺少Dash布局声明
代码中仅生成了下拉框选项列表,但没有声明应用的页面布局,未定义ID为opt的下拉框和ID为plot的图表组件,回调触发时无法找到对应组件。 - 潜在问题:Keras与TensorFlow版本不兼容
独立安装的Keras版本与本地TensorFlow版本不匹配时,也会触发底层策略运算的字符串格式化异常。
修复方案
1. 修正回调参数
X_countyname和y_countyname是全局加载的数据集,无需作为回调参数传入,直接修改回调函数定义即可:
@app.callback(Output('plot', 'figure'),[Input('opt', 'value')]) def update_figure(input): # 原有逻辑不变,直接使用全局的X_countyname、y_countyname即可
2. 补充Dash布局代码
在回调声明前、变量opts定义后补充布局代码:
app.layout = html.Div([ html.H3('县域就业人数预测可视化'), dcc.Dropdown(id='opt', options=opts, value=features[0]), dcc.Graph(id='plot') ])
3. 修复Keras导入路径(解决版本兼容问题)
将所有Keras相关的导入语句改为从TensorFlow中导入,避免版本冲突:
from tensorflow.keras.layers import ( Conv1D, Dense, Dropout, Input, Concatenate, GlobalMaxPooling1D, MaxPooling1D, Flatten, ) from tensorflow.keras.models import Model, Sequential
4. 可选优化(提升运行速度)
当前每次切换下拉选项都会重新训练模型,建议将模型训练逻辑移到全局作用域,应用启动时仅训练一次,回调中仅执行预测逻辑,大幅提升交互响应速度。
内容的提问来源于stack exchange,提问作者Erin
相关产品推荐
相关产品推荐

