【发布时间】:2019-05-22 19:08:27
【问题描述】:
在转换我们将其作为以下文件的预训练 Tensorflow 模型时遇到问题
snapshot_140.ckpt.index
snapshot_140.ckpt.meta
snapshot_140.ckpt.data-00000-of-00001
到张量流精简版 当我们使用转换后的 tflie 文件进行预测时,所有预测都在 Nan 而加载正常的 tensorflow 模型时给出了正确的回归预测
我们在上面得到了这些文件,从 ckpt 文件到 tensorflow .pb 图的转换是通过 tensorflow.python.tools.freeze_graph 工具进行的
然后是TFlite_converter工具,用于转换为tflite
.pb 在制作成 tensorflow 模型时效果很好。但 tflite 模型会产生所有 nan 输出
一个(潜在的解决方案)受此问题启发: https://github.com/tensorflow/tensorflow/issues/22803?fbclid=IwAR0x25CEZjHAQ0dUFBVWa1V3lVcCVIpT4q7lbUUGS9T59w2aXqnUVtNCBHI#issuecomment-474249701
那么如何将 batch_norm is_training 标志设置为 false,只给 ckpt 文件而无法访问模型架构?
如果这真的是问题的解决方案
或者我们应该如何修复 tensorflow lite 模型以提供与 tensorflow 模型相同的输出
此代码用于获取提供 nans 的 tensorflow lite 模型
import tensorflow as tf
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True,
log_device_placement=True)) as sess:
saver = tf.train.import_meta_graph('snapshot_140.ckpt.meta')
saver.restore(sess, "snapshot_140.ckpt")
inp = tf.get_default_graph().get_tensor_by_name("tower_0/Placeholder:0")
out = tf.get_default_graph().get_tensor_by_name("tower_0/out/BiasAdd:0")
print(out)
converter = tf.contrib.lite.TFLiteConverter.from_session(sess, [inp], [out])
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
【问题讨论】:
-
模型是否有 BatchNorm 层?如果不适用,则该修复程序可能不适用。您可以做的一件事是可视化您的 tflite 图以查看所有层/节点是否看起来都正常 (tensorflow.org/lite/guide/faq)。否则,运行 tflite 图的推理代码中可能存在错误。能发个sn-p吗?
-
是的,它有几个 BatchNorm 层,我们对图形进行了可视化,到目前为止没有发现任何可疑之处,这是 tflite 的推理代码:gist.github.com/ZyadShokry/a6157e6e6670753f4c98447661753251
-
你解决了吗?我有一个类似的问题。我使用的模型使用 tf-slim resnet。我想知道这是否来自 tf-slim 到 tflite...
-
不,我没有解决
标签: tensorflow tensorflow-lite