我正在尝试通过TF-Lite toco转换器转换简单模型:
y_train = simple_model() #simple feed forward model
train_it = self.train_data.make_one_shot_iterator()
train_key, train_img, train_lab = train_it.get_next()
converter = tf.contrib.lite.TocoConverter.from_session(sess, [train_img], [y_train])
tflite_model = converter.convert()
open("converted_model.tflite", "wb").write(tflite_model)
但是由于我正在使用尚不支持的oneshot迭代器,它给出了一个错误。我正在从Tensorflow记录中获取数据,并且正在使用Tensorflow 1.9。
转换不受支持的操作:
OneShotIterator
2018-12-24 12:56:18.134447:[tensorflow / contrib / lite / toco / import_tensorflow.cc:1366]
转换不受支持的操作:IteratorGetNext
2018-12-24 12:56:18.136355:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
删除未使用的操作之前:16个运算符,25个数组(0个已量化)
2018-12-24 12:56:18.136441:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
在进行一般图形转换之前:16个运算符,25个数组(0个量化)
2018-12-24 12:56:18.136605:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
通用图形转换通过1:6个运算符后,有13个数组(0个量化)
2018-12-24 12:56:18.138847:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
常规图形转换通过2次后:5个运算符,11个数组(0个量化)
2018-12-24 12:56:18.138901:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
常规图形转换通过3后:4个运算符,9个数组(0个量化)
2018-12-24 12:56:18.138919:[tensorflow / contrib / lite / toco / graph_transformations / graph_transformations.cc:39]
在去量化图形转换之前:4个运算符,9个数组(0个量化)
2018-12-24 12:56:18.138942:[tensorflow / contrib / lite / toco / allocate_transient_arrays.cc:329]
临时数组分配的总大小:0个字节,理论上的最佳值:0个字节。
2018-12-24 12:56:18.139043:[tensorflow / contrib / lite / toco / tflite / export.cc:330]
标准TensorFlow Lite运行时不支持模型中的某些运算符。如果您有针对他们的自定义实现,则可以使用--allow_custom_ops
或通过在调用allow_custom_ops=True
时设置tf.contrib.lite.toco_convert()
来禁用此错误。以下是需要自定义实现的运算符的列表:IteratorGetNext
,OneShotIterator
。
中止(核心已弃用)
所以我的问题是:什么是使模型可转换的简单替代方法?另外,由于转换后的模型将仅用于对单个图像进行预测,是否有可能从转换中排除“训练”图像管道?