【问题标题】:model.save in keras vgg16 just save weights without model architecturekeras vgg16中的model.save只是在没有模型架构的情况下保存权重
【发布时间】:2019-11-25 04:50:28
【问题描述】:

我创建了我的模型并使用 model.save 进行了保存。

然后我使用 tf.keras.modles.load_model 来加载它,它会加载权重和架构。

vgg16 模型只保存权重,没有模型架构

消息错误是:

(ValueError: You are trying to load a weight file containing 15 layers into a model with 0 layers.)

还有,有什么区别

model.savetf.keras.saved_model.save

【问题讨论】:

  • model.save()tf.keras.saved_model.save_model() 是一样的
  • 你能分享你用来保存VGG模型的代码吗?

标签: tensorflow keras model


【解决方案1】:

这似乎是旧版本的 Tensorflow 或 Keras 中的一个问题。 Github 和 Stackoverflow 中也存在相关问题。

但是这个错误在Tensorflow2.1的最新稳定版中已经修复了。

下面提到的是简单的工作代码示例:

from tensorflow.keras.applications import VGG16
import tensorflow as tf

model = VGG16(include_top = False, weights = 'imagenet', input_shape = (224,224,3))

model.save('model.h5')

loaded_model1 = tf.keras.models.load_model('model.h5')

model.save('model')

loaded_model2 = tf.keras.models.load_model('model')

下面提到的是执行命令时的输出,loaded_model1loaded_model2

Model: "vgg16"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_1 (InputLayer)         [(None, 150, 150, 3)]     0         
_________________________________________________________________
block1_conv1 (Conv2D)        (None, 150, 150, 64)      1792      
_________________________________________________________________
block1_conv2 (Conv2D)        (None, 150, 150, 64)      36928     
_________________________________________________________________
block1_pool (MaxPooling2D)   (None, 75, 75, 64)        0         
_________________________________________________________________
block2_conv1 (Conv2D)        (None, 75, 75, 128)       73856     
_________________________________________________________________
block2_conv2 (Conv2D)        (None, 75, 75, 128)       147584    
_________________________________________________________________
block2_pool (MaxPooling2D)   (None, 37, 37, 128)       0         
_________________________________________________________________
block3_conv1 (Conv2D)        (None, 37, 37, 256)       295168    
_________________________________________________________________
block3_conv2 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_conv3 (Conv2D)        (None, 37, 37, 256)       590080    
_________________________________________________________________
block3_pool (MaxPooling2D)   (None, 18, 18, 256)       0         
_________________________________________________________________
block4_conv1 (Conv2D)        (None, 18, 18, 512)       1180160   
_________________________________________________________________
block4_conv2 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_conv3 (Conv2D)        (None, 18, 18, 512)       2359808   
_________________________________________________________________
block4_pool (MaxPooling2D)   (None, 9, 9, 512)         0         
_________________________________________________________________
block5_conv1 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv2 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_conv3 (Conv2D)        (None, 9, 9, 512)         2359808   
_________________________________________________________________
block5_pool (MaxPooling2D)   (None, 4, 4, 512)         0         
=================================================================
Total params: 14,714,688
Trainable params: 14,714,688
Non-trainable params: 0

如果您在将 Tensorflow 版本升级到 2.1 后仍遇到问题,请分享上述完整代码。我们可以进一步调查。

【讨论】:

    猜你喜欢
    • 2018-12-12
    • 1970-01-01
    • 2019-05-20
    • 1970-01-01
    • 2018-04-22
    • 2014-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多