Tensorflow model.summary()输出与模型定义不一致

Tensorflow model.summary()输出与模型定义不一致,tensorflow,keras,Tensorflow,Keras,我正在使用子类API来构建一个简单的conv-net,我想使用summary方法来了解我的模型的体系结构。但是,当我调用model.summary()时,层的顺序和输出是错误的 形状也没有显示。有没有一个干净的方法来解决这个问题?或者我需要重写model类中的model.summary()方法 以下是相关图层: 类事物(keras.Model): 定义初始(自我,**kwargs): 超级() self.conv1=keras.layers.voluminal.Conv2D(96, 内核大小=(

我正在使用子类API来构建一个简单的conv-net,我想使用summary方法来了解我的模型的体系结构。但是,当我调用model.summary()时,层的顺序和输出是错误的 形状也没有显示。有没有一个干净的方法来解决这个问题?或者我需要重写model类中的model.summary()方法

以下是相关图层:

类事物(keras.Model):
定义初始(自我,**kwargs):
超级()
self.conv1=keras.layers.voluminal.Conv2D(96,
内核大小=(11,11),
步幅=4,
激活=“relu”,
data\u format=“channels\u last”,
输入_形=(277277,3))
self.flatte=keras.layers.flatte(data\u format=“channels\u last”)
self.density=keras.layers.density(4096,activation=“relu”)
self.pool=keras.layers.pooling.MaxPoolig2D(池大小=(3,3),步幅=2,
数据\格式=“频道\上次”)
def呼叫(自我,输入):
conv1=self.conv1(输入)
pool1=self.pool(conv1)
展平\u conv=自展平(池1)
ff_1=自密实(展平转换)
返回ff_1
a=事物()
a、 构建(输入_形状=(无、277、277、3))
a、 摘要()
输出:
模型:“thing_9”
_________________________________________________________________
层(类型)输出形状参数
=================================================================
conv2d_9(conv2d)多个34944
_________________________________________________________________
展平_9(展平)倍数0
_________________________________________________________________
密集_14(密集)多重415240192
_________________________________________________________________
最大池2D池9(最大池2多个0
=================================================================
总参数:415275136
可培训参数:415275136
不可训练参数:0
_________________________________________________________________

model.summary函数使用函数打印模型结构的信息,它循环
model.layer
打印所有层信息,
model.layer
是一个列表,包含您在模型中定义的所有层(即使用
self.
),此列表中图层的顺序由定义图层的顺序决定

因此,您可以使用与调用图层相同的顺序来定义图层(但不会提供有关图层连接和图层输出形状的信息),或者您可以通过在自定义模型类中定义一个简单的摘要函数来解决此问题:

def summary_model(self):
    inputs = keras.Input(shape=(277, 277, 3))
    outputs = self.call(inputs)
    keras.Model(inputs=inputs, outputs=outputs, name="thing").summary()
并使用以下命令调用它:

a.summary_model()
哪些产出:

Model: "thing"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
input_1 (InputLayer)         [(None, 277, 277, 3)]     0
_________________________________________________________________
conv2d (Conv2D)              (None, 67, 67, 96)        34944
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 33, 33, 96)        0
_________________________________________________________________
flatten (Flatten)            (None, 104544)            0
_________________________________________________________________
dense (Dense)                (None, 4096)              428216320
=================================================================
Total params: 428,251,264
Trainable params: 428,251,264
Non-trainable params: 0
_________________________________________________________________

这很好,谢谢!在问我的问题之前,我应该先看一下源代码,而不仅仅是文档。为了澄清一下,您定义的自定义函数使用函数API来声明模型,并且您使用该模型来输出摘要?很高兴为您提供帮助,是的,按照您调用的顺序定义了一个新模型,以及是的,这是一种非常有效的总结方式。