【问题标题】:Tensorflow model.summary() not showing layers informationTensorflow model.summary() 不显示图层信息
【发布时间】:2021-08-14 02:24:27
【问题描述】:

我在使用 Keras 的函数式 API 执行迁移学习时遇到问题。 summary() 函数不显示新模型的信息层。 这是我运行以导入模型的代码:

import tensorflow as tf
from tensorflow import keras 
from keras.models import Model
model = tf.keras.applications.VGG16()
model.summary()

不出所料,输出是正确的:

Model: "vgg16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_4 (InputLayer)         [(None, 224, 224, 3)]     0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 224, 224, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 224, 224, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 112, 112, 64)      0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 112, 112, 128)     73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 112, 112, 128)     147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 56, 56, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 56, 56, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 56, 56, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 28, 28, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 28, 28, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 28, 28, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 14, 14, 512)       0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 14, 14, 512)       2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 7, 7, 512)         0         
_________________________________________________________________
flatten (Flatten)            (None, 25088)             0         
_________________________________________________________________
fc1 (Dense)                  (None, 4096)              102764544 
_________________________________________________________________
fc2 (Dense)                  (None, 4096)              16781312  
_________________________________________________________________
predictions (Dense)          (None, 1000)              4097000   
=================================================================
Total params: 138,357,544
Trainable params: 138,357,544
Non-trainable params: 0
_________________________________________________________________

下面是我通过删除模型的最后 2 层来执行迁移学习的代码:

model2 = Model(model.input, model.layers[-2].output)
model2.summary()

这是输出:

Model: "model_8"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
Total params: 134,260,544
Trainable params: 134,260,544
Non-trainable params: 0
_________________________________________________________________

与图层相关的所有信息都已消失...这是功能 API 的正常行为吗?

提前致谢。

【问题讨论】:

    标签: python tensorflow keras functional-programming transfer


    【解决方案1】:

    我已经用 tensorflow 2.5.0 版尝试过这个。它不显示图层信息。 所以像这样导入。

    from tensorflow import keras
    
    model = keras.Model(....)
    
    model.summary()
    

    【讨论】:

      【解决方案2】:

      不要混用 tensorflow 2.x 和独立的 keras。你应该使用

      from tensorflow import keras 
      from tensorflow.keras.models import Model # < --- import from tf
      

      【讨论】:

      • 非常感谢!当我像这样导入“模型”类时,这有效。你知道是什么导致了这种行为吗?
      • 如果你有tf 2.x,这就是它的导入方式。 keras 现在是 tf 的一部分,不再是一个独立的包。希望有帮助。别忘了给hat :)
      • 非常感谢 :)
      猜你喜欢
      • 2020-03-15
      • 2012-02-01
      • 2013-07-18
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-21
      • 1970-01-01
      相关资源
      最近更新 更多