解决keras.utils.plot_model报错:AttributeError: module 'pydot'无InvocationException属性
问题描述
希望使用keras.utils中的plot_model工具绘制AI模型层结构图,已知该工具依赖pydot和graphviz。已通过Anaconda Prompt执行
pip install pydot安装pydot,通过EXE安装程序安装graphviz,但未生成预期的模型图,反而出现报错:AttributeError: module 'pydot' has no attribute 'InvocationException'。该错误由FileNotFoundError: [WinError 2] "dot" not found in path.引发,根源是FileNotFoundError: [WinError 2] O sistema não pode encontrar o arquivo especificado(葡萄牙语意为“系统找不到指定文件”)。
问题根源
核心原因是graphviz的dot.exe程序未被系统识别——安装路径未加入系统环境变量,导致pydot无法调用该工具;InvocationException的属性错误是环境变量未生效或pydot版本适配问题引发的连锁报错。
解决步骤
确认graphviz安装路径
找到graphviz的EXE安装目录,默认路径多为C:\Program Files\Graphviz\bin(64位系统)或C:\Program Files (x86)\Graphviz\bin(32位系统),检查该目录下是否存在dot.exe,确保安装完整。添加路径到系统环境变量
右键“此电脑”→“属性”→“高级系统设置”→“环境变量”,在“系统变量”中找到Path并编辑,点击“新建”粘贴graphviz的bin目录路径,保存所有设置。重启终端与IDE
关闭所有打开的Anaconda Prompt、Python IDE(如PyCharm、Jupyter Notebook),重新启动后再运行代码,确保环境变量生效。适配pydot版本(可选)
若上述操作后仍报错,可能是pydot版本过高,执行以下命令降级:pip uninstall pydot -y pip install pydot==1.4.2验证环境
在终端执行dot -V,能输出graphviz版本信息则说明配置成功;运行以下测试代码验证:from keras.utils import plot_model from keras.models import Sequential from keras.layers import Dense model = Sequential() model.add(Dense(8, input_shape=(10,), activation='relu')) model.add(Dense(1, activation='sigmoid')) plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=True)
内容的提问来源于stack exchange,提问作者BsAxUbx5KoQDEpCAqSffwGy554PSah

