tf.keras.utils.plot_model 开启show_shapes时布局异常如何解决
问题原因
tf.keras.utils.plot_model 底层通过pydot生成Graphviz支持的dot格式描述,再调用Graphviz渲染最终模型图。你遇到的形状标注垂直错位问题,本质是依赖版本兼容bug:
- pydot 1.4.2及后续部分版本,在生成节点内嵌的HTML表格标签时,会丢失单元格同行排布、水平对齐的相关属性,导致本应左右分栏的「标注列(input:/output:)」和「形状列」,被Graphviz识别为上下垂直排布的两行内容。
- 若本地安装的Graphviz版本低于2.40,也会因HTML表格渲染规则不兼容,触发同类布局异常。
修复方案
按优先级选择任意一种方案即可解决:
- 方案一(推荐,稳定性最高):替换存在bug的pydot为修复维护分支pydot-ng
执行以下命令重装依赖:
操作完成后重启Python运行环境,重新执行绘图代码即可得到水平分栏的预期效果。注意需提前确认Graphviz已正确安装,且其bin目录已加入系统环境变量,否则plot_model会抛出依赖缺失错误。pip uninstall -y pydot pip install pydot-ng - 方案二:降级pydot到无兼容问题的版本
若不想替换现有依赖,直接将pydot降级到1.4.1版本即可:pip install pydot==1.4.1 - 方案三:手动修改源码适配
若不方便调整依赖版本,可找到本地TensorFlow安装路径下的tensorflow/python/keras/utils/vis_utils.py文件,定位到生成输入输出形状标注的HTML表格代码段,给所有<td>标签添加valign="top" align="left"属性,同时删除标签之间多余的换行空格,避免pydot将空白字符误解析为单元格换行。
内容的提问来源于stack exchange,提问作者RACHID BEN ABDELMALEK
相关产品推荐
相关产品推荐

