我正在尝试使用tensorflow lite toco转换器以获取tflite图。 我使用toco命令行,以获得tflite图。转换过程中没有出现任何错误,但是看来我的转换中包含垃圾(输出是nans)。我正在寻求有关如何调试此转换的想法。
我执行以下步骤:
加载.ckpt文件并转换为Frozen_graph:
带有g.as_default(),g.device(device_t),\ tf.Session(config = soft_config)作为会话: batch_shape =(batch_size,)+ img_shape img_placeholder = tf.placeholder(tf.float32,shape = batch_shape, name ='img_placeholder')
preds = transform(img_placeholder)
saver = tf.train.Saver()
saver.restore(sess, checkpoint_dir)
frozen_graph_def = tf.graph_util.convert_variables_to_constants(sess,sess.graph_def,['transformer/up-sample/mul'])
with open('frozeen_graph.pb', 'wb') as f:
f.write(frozen_graph_def.SerializeToString())
要解决的问题:上面的代码是否等同于使用tensorflow / python / tools / freeze_graph.py脚本?
当我使用上面的代码时,我还通过对冻结的图形进行劳动检查冻结,并通过它传递输入图像,输出看起来不错。因此,似乎冻结起作用了。
toco \ --graph_def_file = frozeen_graph.pb \
--output_file = converted_graph.lite \ --input_format = TENSORFLOW_GRAPHDEF \ --output_format = TFLITE \ --input_shape = 1,256,256,3 \ --input_array = img_placeholder:0 \ --output_array = transformer / up-sample / mul:0 \ --inference_type = FLOAT \ --input_data_type = FLOAT
当我执行以上代码时,我没有任何错误。请注意,我更改了图形以消除一些“不支持的操作”错误。
接下来,我使用tensorflow lite解释器来测试转换后的图(使用python API):
tflite_graph_filename = 'converted_graph.lite'
# Load TFLite model and allocate tensors.
interpreter =
tf.contrib.lite.Interpreter(model_path=tflite_graph_filename)
interpreter.allocate_tensors()
# Get input and output tensors.
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
input_shape = input_details[0]['shape']
X = np.zeros(input_shape,np.float32)
X[0] = content_image
input_data = X
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])
不幸的是,output_data都是 nanes ,
有人可以给我一些调试建议或正确的转换方法吗?
谢谢, 瓦迪姆
答案 0 :(得分:0)
将.pb转换为.lite的简单方法在这里得到回答:
https://stackoverflow.com/a/58583419/11517841
为确保您没有犯任何与架构相关的错误,请您在FYI /“当心”: