python - 绘图模型不显示模型层,仅显示模型名称
问题描述
我正在尝试使用 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 代码(调用方法)。这里没有图层图。我们无法知道层是如何相互连接的(因为这是在调用主体中定义的,而不是作为显式数据结构),因此我们无法推断输入/输出形状。
有两种解决方案:
- 您可以按顺序/使用功能 api 构建模型。
- 您将您的 ' ' 函数包装
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() can't print output shape while using subclass model
此外,这是一篇很好的文章:https ://medium.com/tensorflow/what-are-symbolic-and-imperative-apis-in-tensorflow-2-0-dfccecb01021
推荐阅读
- sql-server - 在 SQL 中声明标量变量错误 - SSMS
- vue.js - 使用其他浏览器时如何在 Vue.js 中设置警报?
- mysql - 在动态日期上增加行索引并与其他表联合
- angular - Angular中的递增/递减数字
- sql - 在 SQL 中按特定组添加具有计数和总和的列
- java - 编写一个使用线程计算忽略操作顺序的表达式的 Java 程序?
- reactjs - 将 pathPrefix 添加到 Gatsby 中的静态图像资产
- spring - 从秘密桶中提取“spring.datasouce.password”的正确方法是什么?
- docker - 无法产生消费消息
- proxysql - 通过套接字连接到 ProxySQL - “没有这样的文件或目录”