我现在正尝试将savedmodel
转换为tflite
格式。
这样做时,我收到以下错误消息。
ValueError:仅第一个维度不支持
我猜这个问题主要是由于我的部分源代码造成的:
x = tf.placeholder(tf.float32, shape=[None, None, None], name='JW_Input')
W = tf.Variable(tf.zeros([28, 28, 10]))
实际上,由于必须考虑输入图像的各种尺寸,因此很难更改有关输入形状的原始代码。
是否有另一种解决此问题的解决方案?
import tensorflow as tf
import numpy as np
import os
import shutil
input_array = np.zeros((1, 28, 28))
x = tf.placeholder(tf.float32, shape=[None, None, None], name='JW_Input')
W = tf.Variable(tf.zeros([28, 28, 10]))
y = tf.matmul(x, W, name='JW_Output')
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(y, feed_dict={x: input_array})
target_dir = 'savedmodel_test_dir'
if os.path.isdir(target_dir) is True:
shutil.rmtree(target_dir)
tf.saved_model.simple_save(sess, 'savedmodel_test_dir', inputs={'Input': x}, outputs={'Output': y})
src_model_file = os.path.join(os.getcwd(), "savedmodel_test_dir")
convert = tf.lite.TFLiteConverter.from_saved_model(src_model_file,
input_arrays=["JW_Input"],
output_arrays=["JW_Output"])
convert.convert()
预期结果:转换时没有错误。
实际结果:错误发生以下消息。
答案 0 :(得分:0)
不幸的是,您不能使用输入大小可变的TFLite模型。甚至第一维也必须固定。尽管该错误表明如果在第一个维度中为“无”是可以的,但实际上,如果在输入的任何维度中都为“无”,则在推理过程中还会遇到其他错误。
这样做的原因是TFLite转换器执行了多个图形转换以优化您的图形,并且这些转换需要能够传播(固定)图形中所有张量的大小。
至少在1.14版之前的TF就是这种情况