【发布时间】:2020-08-18 00:55:16
【问题描述】:
我有一个存储为 hdf5 的模型,我使用 saved_model.save 将其导出到 protobuf (PB) 文件,如下所示:
from tensorflow import keras
import tensorflow as tf
model = keras.models.load_model("model.hdf5")
tf.saved_model.save(model, './output_dir/')
这工作正常,结果是一个 saved_model.pb 文件,我以后可以用其他软件查看,没有问题。
但是,当我尝试使用 TensorFlow1 导入此 PB 文件时,我的代码失败了。由于 PB 应该是一种通用格式,这让我感到困惑。
我用来读取PB文件的代码是这样的:
import tensorflow as tf
curr_graph = tf.Graph()
curr_sess = tf.InteractiveSession(graph=curr_graph)
f = tf.gfile.GFile('model.hdf5','rb')
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
f.close()
这是我得到的例外:
Traceback(最近一次调用最后一次):文件“read_pb.py”,第 14 行,在 graph_def.ParseFromString(f.read()) google.protobuf.message.DecodeError: 解析消息出错p>
我有一个不同的模型存储为 PB 文件,读取代码可以正常工作。
发生了什么事?
***** 编辑 1 *****
在下面使用 Andrea Angeli 的代码时,我遇到了以下错误:
遇到错误:NodeDef 未提及 attr 'exponential_avg_factor' 在 Op y:T、batch_mean:U、batch_variance:U、 保留空间_1:U,保留空间_2:U,保留空间_3:U; attr=T:type,allowed=[DT_HALF, DT_BFLOAT16, DT_FLOAT]; attr=U:type,allowed=[DT_FLOAT]; attr=epsilon:float,default=0.0001; attr=data_format:string,default="NHWC",allowed=["NHWC", "NCHW"]; attr=is_training:bool,default=true>;节点定义:{节点 u-mobilenetv2/bn_Conv1/FusedBatchNormV3}。 (检查您的 GraphDef 解释二进制文件是最新的 GraphDef 生成二进制文件。)。
有解决办法吗?
【问题讨论】:
标签: python tensorflow tensorflow2.0