Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何打印Tensorflow V2 keras模型的所有激活形状(比summary()更详细)?_Python_Tensorflow_Keras_Tensorflow2.0_Tf.keras - Fatal编程技术网

Python 如何打印Tensorflow V2 keras模型的所有激活形状(比summary()更详细)?

Python 如何打印Tensorflow V2 keras模型的所有激活形状(比summary()更详细)?,python,tensorflow,keras,tensorflow2.0,tf.keras,Python,Tensorflow,Keras,Tensorflow2.0,Tf.keras,我花了很多时间研究Tensorflow v.0和v.1,现在我正在尝试Tensorflow v.2 keras模型model.summary()看起来简单方便,但缺少细节 这里有一个玩具的例子。假设我定义自定义层和模型如下(一个函数式API样式和一个子类syle) 请看下面。我想在自定义层中查看基本层,但.summary()仅显示浅层信息(仅显示直接子层) 玩具自定义层(层只是玩具定义): 将tensorflow导入为tf 从tensorflow进口keras 从tensorflow.keras

我花了很多时间研究Tensorflow v.0和v.1,现在我正在尝试Tensorflow v.2 keras模型
model.summary()
看起来简单方便,但缺少细节

这里有一个玩具的例子。假设我定义自定义层和模型如下(一个函数式API样式和一个子类syle)

请看下面。我想在自定义层中查看基本层,但
.summary()
仅显示浅层信息(仅显示直接子层)

玩具自定义层(层只是玩具定义):

将tensorflow导入为tf
从tensorflow进口keras
从tensorflow.keras.layers导入(稠密、Conv2D、批次标准化)
LayerA类(tf.keras.layers.Layer):
定义初始值(自身、数值输出,**kwargs):
超级(LayerA,self)。\uuuuu初始值(**kwargs)
self.num\u输出=num\u输出
self.dense1=密集(64)
self.dense2=密集(128)
self.dense3=密集(num_输出)
self.bn=批量标准化(可训练=真)
def调用(自我、输入、训练=真):
x=自密度1(输入)
x=自我.bn(x,培训=培训)
x=自密度1(输入)
x=自我.bn(x,培训=培训)
x=自密度1(输入)
x=自我.bn(x,培训=培训)
返回x
类别LayerB(tf.keras.layers.Layer):
定义初始值(自身、数值输出,**kwargs):
超级(LayerB,self)。\uuuuu初始值(**kwargs)
self.num\u输出=num\u输出
self.densed=稠密(64)
self.bn=批量标准化(可训练=真)
def调用(自我、输入、训练=真):
x=自密实(输入)
x=自我.bn(x,培训=培训)
返回x
带有功能API的模型定义:

inputs=tf.keras.Input(shape=(28),name='Input')
x=LayerA(7,name='layer_a')(输入)
x=LayerB(13,name='layer_b')(x)
x=tf.reduce_max(x,1)
model_func=keras.model(输入=输入,输出=x,name='model')
模型函数摘要()
#结果:
#层(类型)输出形状参数
# =================================================================
#输入(InputLayer)[(无,28)]0
# _________________________________________________________________
#a层(LayerA)(无,64)2112
#b层(b层)(无,64层)4416
#tf_op_layer_Max_1(TensorFlo[(无),)]0
# =================================================================
#总参数:6528
#可培训参数:6272
#不可培训参数:256
模型定义子类化:

A类模型(tf.keras.Model):
定义初始化(自):
超级(ModelA,self)。\uuuu init\uuuuu()
self.block_1=LayerA(7,name='layer_a')
self.block_2=LayerB(13,name='layer_b')
def呼叫(自我,输入):
x=自块_1(输入)
x=自块2(x)
x=tf.reduce_max(x,1)
返回x
model_subclass=ModelA()
y=模型_子类(输入)
模型_子类摘要()
###结果:
#层(类型)输出形状参数
# =================================================================
#a层(LayerA)(无,64)2112
#b层(b层)(无,64层)4416
# =================================================================
#总参数:6528
#可培训参数:6016
#不可训练参数:512
如何打印模型中
Conv
Dense
层的所有激活形状?例如

layer_a/dense_1                          (None, ...)
layer_a/dense_2                          (None, ...)
layer_b/dense_1                          (None, ...)
layer_b/maybe-even-deeper-layer/conv2d_1 (None, ...)
... etc ...
在Tensorflow v.0或v.1中,我将执行以下操作:

for n in tf.get_default_graph().as_graph_def().node:
    print(n.name, n.shape)

当我有keras模型时,有没有办法打印更多细节?

摘要不会自动执行此操作,因此您必须进行调整

例如,您可以创建经常性摘要:

def full_summary(layer):

    #check if this layer has layers
    if hasattr(layer, 'layers'):
        print('summary for ' + layer.name)
        layer.summary()
        print('\n\n')

        for l in layer.layers:
            full_summary(l)
将其用作:

full_summary(my_model)

我只知道你可以把
LayerA
LayerB
作为子模型,然后你可以使用像
model\u func.get\u layer('layer\u a').summary()
,但可能不是你想要的。有
.summary()吗
keras层的方法?不确定,但您始终可以将这些自定义层转换为
模型
。每个
模型
都是