Ubuntu下TensorFlow plot_model调用pydotplus生成空文件报错求助
TensorFlow plot_model生成0字节文件并抛出InvocationException错误
环境配置
- Ubuntu 22.04
- PyCharm 2024.1.3
- Python 3.12
- TensorFlow 2.16.1
问题现象
调用tf.keras.utils.plot_model函数绘制并保存模型可视化文件时,生成的文件为0字节无法打开,脚本执行抛出如下错误:
Traceback (most recent call last): File "/home/linuxpc/PycharmProjects/Semen_project/temp.py", line 314, in create_model(model_parameters=model_par) File "/home/linuxpc/PycharmProjects/Semen_project/temp.py", line 224, in create_model tf.keras.utils.plot_model( File "/home/linuxpc/PycharmProjects/Semen_project/.venv/lib/python3.12/site-packages/keras/src/utils/model_visualization.py", line 456, in plot_model dot.write(to_file, format=extension) File "/home/linuxpc/PycharmProjects/Semen_project/.venv/lib/python3.12/site-packages/pydotplus/graphviz.py", line 1919, in write fobj.write(self.create(prog, format)) ^^^^^^^^^^^^^^^^^^^^^^^^^ File "/home/linuxpc/PycharmProjects/Semen_project/.venv/lib/python3.12/site-packages/pydotplus/graphviz.py", line 2031, in create raise InvocationException( pydotplus.graphviz.InvocationException: Program terminated with status: -6. stderr follows: failed at node 716[0] dot: maze.c:311: chkSgraph: Assertion `np->cells[0]' failed
模型构建代码
gobal_input_layer = tf.keras.layers.Input(shape=layer_size[0]['1'][0]) """Model_1 to detect fibers""" for lnum, layer in enumerate(layer_size[0]): if lnum == 0: for vnum, val in enumerate(layer_size[0][layer]): if vnum == 0: layer = tf.keras.layers.Identity()(gobal_input_layer) else: layer = tf.keras.layers.Dense(val[0], activation="sigmoid")(layer) if len(val) == 2: layer = tf.keras.layers.Dropout(val[1])(layer) output_layer = tf.keras.layers.Dense(2, activation="sigmoid")(layer) intermediate = tf.keras.layers.Reshape((2, 1), input_shape=(1, 2))(output_layer) first_half = tf.keras.layers.Cropping1D(cropping=(0, 1))(intermediate) first_half = tf.keras.layers.Reshape((1,), input_shape=(1, 1))(first_half) second_half = tf.keras.layers.Cropping1D(cropping=(0, 1))(intermediate) second_half = tf.keras.layers.Reshape((1,), input_shape=(1, 1))(second_half) elif lnum == 1: for vnum, val in enumerate(layer_size[0][layer]): if vnum == 0: layer_2 = tf.keras.layers.Concatenate()([gobal_input_layer, second_half]) layer_2 = tf.keras.layers.Identity()(layer_2) else: layer_2 = tf.keras.layers.Dense(val[0], activation="sigmoid")(layer_2) if len(val) == 2: layer_2 = tf.keras.layers.Dropout(val[1])(layer_2) output_layer_2 = tf.keras.layers.Dense(2, activation="sigmoid")(layer_2) else: raise ValueError(f"The length of layers is than 2") outputs = tf.keras.layers.Concatenate()([output_layer_2, output_layer]) outputs = tf.keras.layers.Identity()(outputs) model = tf.keras.Model(inputs=gobal_input_layer, outputs=outputs) model.name = model_parameters["model_name"] return model
已尝试的排查步骤
- 更换pydot、pydotplus、pydot-ng(均通过pip安装)
- 通过
sudo apt install graphviz和pip install graphviz两种方式安装Graphviz - 更换jpg、png、pdf等输出文件格式
- 安装相关依赖后重启系统
求助需求
推测问题可能出在图像生成/写入环节,或是模型结构无法转为dot格式,但无法定位具体原因,恳请协助解决或提供排查方向。
内容的提问来源于stack exchange,提问作者Андрей Никитёнок
相关产品推荐
相关产品推荐

