Tensorflow (.pb) 格式到 Keras (.h5)

Pra*_*een 4 machine-learning python-3.x deep-learning keras tensorflow

我正在尝试将 Tensorflow (.pb) 格式的模型转换为 Keras (.h5) 格式以查看事后注意可视化。我试过下面的代码。

file_pb = "/test.pb"
file_h5 = "/test.h5"
loaded_model = tf.keras.models.load_model(file_pb)
tf.keras.models.save_keras_model(loaded_model, file_h5)
loaded_model_from_h5 = tf.keras.models.load_model(file_h5)
Run Code Online (Sandbox Code Playgroud)

谁能帮我这个?这甚至可能吗?

Ten*_*ior 9

在“最新”中Tensorflow Version (2.2),当我们Save使用模型时tf.keras.models.save_model,模型将Saved不仅在 a 中,pb file而且将保存在一个文件夹中,该Variables文件Assets夹包括文件夹和文件夹,以及saved_model.pb文件,如下面的屏幕截图所示:

保存的模型文件夹

例如,如果ModelSaved与名称,"Model"我们要Load使用的文件夹,“模型”的名称,而不是saved_model.pb,如下图所示:

loaded_model = tf.keras.models.load_model('Model')
Run Code Online (Sandbox Code Playgroud)

代替

loaded_model = tf.keras.models.load_model('saved_model.pb')
Run Code Online (Sandbox Code Playgroud)

您可以做的另一项更改是替换

tf.keras.models.save_keras_model
Run Code Online (Sandbox Code Playgroud)

tf.keras.models.save_model
Run Code Online (Sandbox Code Playgroud)

完整的工作守则模型从转换Tensorflow Saved Model Format (pb)Keras Saved Model Format (h5)如下图所示:

import os
import tensorflow as tf
from tensorflow.keras.preprocessing import image

New_Model = tf.keras.models.load_model('Dogs_Vs_Cats_Model') # Loading the Tensorflow Saved Model (PB)
print(New_Model.summary())
Run Code Online (Sandbox Code Playgroud)

New_Model.summary命令的输出是:

Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 148, 148, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 74, 74, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 72, 72, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 36, 36, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 34, 34, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 17, 17, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 15, 15, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 7, 7, 128)         0         
_________________________________________________________________
flatten (Flatten)            (None, 6272)              0         
_________________________________________________________________
dense (Dense)                (None, 512)               3211776   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 513       
=================================================================
Total params: 3,453,121
Trainable params: 3,453,121
Non-trainable params: 0
_________________________________________________________________
None
Run Code Online (Sandbox Code Playgroud)

继续代码:

# Saving the Model in H5 Format and Loading it (to check if it is same as PB Format)
tf.keras.models.save_model(New_Model, 'New_Model.h5') # Saving the Model in H5 Format

loaded_model_from_h5 = tf.keras.models.load_model('New_Model.h5') # Loading the H5 Saved Model
print(loaded_model_from_h5.summary())
Run Code Online (Sandbox Code Playgroud)

命令的输出,print(loaded_model_from_h5.summary())如下所示:

Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d (Conv2D)              (None, 148, 148, 32)      896       
_________________________________________________________________
max_pooling2d (MaxPooling2D) (None, 74, 74, 32)        0         
_________________________________________________________________
conv2d_1 (Conv2D)            (None, 72, 72, 64)        18496     
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 36, 36, 64)        0         
_________________________________________________________________
conv2d_2 (Conv2D)            (None, 34, 34, 128)       73856     
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 17, 17, 128)       0         
_________________________________________________________________
conv2d_3 (Conv2D)            (None, 15, 15, 128)       147584    
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 7, 7, 128)         0         
_________________________________________________________________
flatten (Flatten)            (None, 6272)              0         
_________________________________________________________________
dense (Dense)                (None, 512)               3211776   
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 513       
=================================================================
Total params: 3,453,121
Trainable params: 3,453,121
Non-trainable params: 0
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)

? 从上面Summary的两者可以看出Models,两者Models是相同的。

  • 我在保存模型时遇到此错误 AttributeError: '_UserObject' object has no attribute '_is_graph_network' (6认同)
  • 我收到此错误:AttributeError:“AutoTrackable”对象没有属性“Summary”? (3认同)
  • 这就像一个梦想成真的约定,但我得到了这个错误:“_UserObject”对象没有属性“summary”。我正在 Tensorflow 版本 (2.3) 上运行。 (2认同)