绘制模型不显示模型层,仅显示模型名称



我正试图使用TensorFlow2构建一些模型,因此我创建了一个模型类,如下所示:

import tensorflow as tf
class Dummy(tf.keras.Model):
def __init__(self, name="dummy"):
super(Dummy, self).__init__()
self._name = name
self.dense1 = tf.keras.layers.Dense(4, activation=tf.nn.relu)
self.dense2 = tf.keras.layers.Dense(5, activation=tf.nn.softmax)
def call(self, inputs, training=False):
x = self.dense1(inputs)
return self.dense2(x)
model = Dummy()
model.build(input_shape=(None,5))

现在我想绘制模型,而使用summary()返回我所期望的,plot_model(model, show_shapes=True, expand_nested=True)只返回具有模型名称的块。

如何返回模型的图形?

Francois Chollet说以下内容:

您可以在函数或序列模型,因为这些模型是静态图层。

相反,子类化模型是一段Python代码(调用方法(。这里没有层次图。我们无法知道层相互连接(因为这是在调用,而不是作为显式数据结构(,因此我们无法推断输入/输出形状。

有两种解决方案:

  1. 要么按顺序/使用Functional api构建模型
  2. 您将"call"函数封装到一个函数模型中,如下所示:

class Subclass(Model):

def __init__(self):
...
def call(self, x):
...
def model(self):
x = Input(shape=(24, 24, 3))
return Model(inputs=[x], outputs=self.call(x))

if __name__ == '__main__':
sub = subclass()
sub.model().summary()

答案来自这里:model.summary((可以';使用子类模型时打印输出形状

此外,这是一篇很好的文章:https://medium.com/tensorflow/what-are-symbolic-and-imperative-apis-in-tensorflow-2-0-dfccecb01021

最新更新