如何在keras中使用polt_model在彼此之上绘制输入和输出形状

how to plot input and output shapes on top of each other using polt_model in keras

我想使用 Keras.utils.plot_model 函数绘制我的模型。我的问题是,当我绘制模型时,输入和输出形状不会彼此重叠,而是会并排放置(如图 1)。 这是绘制此模型的代码:

model = tf.keras.models.Sequential()
model.add(layers.Embedding(100, 128, input_length=45,
                       input_shape=(45,), name='embed'))
model.add(layers.Conv1D(32, 7, activation='relu'))
model.add(layers.MaxPooling1D(5))
model.add(layers.Conv1D(32, 7, activation='relu'))
model.add(layers.GlobalMaxPooling1D())
model.add(layers.Dense(1))
plot_model(model, to_file='model_plot.png', show_shapes=True, show_layer_names=False)

但我喜欢模型图,例如图 2,这是我们可以在互联网上找到的典型图,我之前创建过很多次。 我在 plot_model 中找不到任何 figsize 或 fontsize 选项来尝试更改它们。我使用 google Colaboratory Notebook。

非常感谢任何帮助。

这很容易,但使用 模型序列 更容易管理。 什么是 嵌入层 和数据集缓冲区!? 是分批输入,你管组合或批数! (用MS-word画图比较快还是画图工具,我学习的时候用free office)

[代码]:

import tensorflow as tf
from tensorflow.keras.utils import plot_model

model = tf.keras.models.Sequential([
    tf.keras.layers.InputLayer(input_shape=(100,), dtype='int32', name='input'),
    tf.keras.layers.Embedding(output_dim=512, input_dim=100, input_length=100),
    tf.keras.layers.LSTM(32),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid', name='output'),
])


dot_img_file = 'F:\temp\Python\img\001.png'
tf.keras.utils.plot_model(model, to_file=dot_img_file, show_shapes=True)
# <IPython.core.display.Image object>

input('...')

[输出]:

F:\temp\Python>python test_tf_plotgraph.py
2022-03-28 14:21:26.043715: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations:  AVX AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2022-03-28 14:21:26.645113: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1525] Created device /job:localhost/replica:0/task:0/device:GPU:0 with 4565 MB memory:  -> device: 0, name: NVIDIA GeForce GTX 1060 6GB, pci bus id: 0000:01:00.0, compute capability: 6.1
...

...

我也遇到了同样的问题,终于找到了这个githublink。 github

只是因为我们使用的是tensorflow ver2.8.0,所以好像会出现这个问题。

如link中所述,一个有效的解决方案是更改我们的tensorflow版本,例如tf-nightly。

[tensorflow ver2.8.0]

import tensorflow as tf
tf.__version__

2.8.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(1,input_shape=[1], name="input_layer")
],name="model_1")

model.compile(...)

[tensorflow 每晚]

!pip --quiet install tf-nightly #try not to use tf ver2.8
import tensorflow as tf
tf.__version__

2.10.0-dev20220403

#just do the same thing as above
model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(1,input_shape=[1], name="input_layer")
],name="model_1")

model.compile(...)

希望你能解决这个问题。