tensorflow - keras vgg16中的model.save只是在没有模型架构的情况下保存权重
问题描述
我创建了我的模型并使用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.save和tf.keras.saved_model.save
解决方案
这似乎是旧版本的 Tensorflow 或 Keras 中的一个问题。Github 和 Stackoverflow 中也存在相关问题。
但是这个错误在最新的稳定版本中被修复Tensorflow
了2.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_model1
和loaded_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 后仍遇到问题,请分享上述完整代码。我们可以进一步调查。
推荐阅读
- javascript - Google Drive API“保存到云端硬盘”多个文件
- javascript - 有没有办法一次生成所有内容安全策略内联哈希?(WordPress)
- visual-studio-code - 将 Esp32-Wifi 库添加到 PlatformIO
- python - Create for statements for each spaces in string
- ios - Swift iOS 禁用键盘自动完成和顶部
- arrays - 给定总 num 项和最大数组大小,如何获取数组树的深度?
- python - 无法在树莓派中的 docker python3.7-slim 上安装 numpy
- python - 如何按年份和日期分组,并在熊猫中汇总总和
- html - 更改字体大小时,文本未对齐
- javascript - 在 ReactJS 中将类组件转换为功能组件