我正在尝试将具有两个双向GRU层的自定义Keras模型转换为tf-lite,以便在移动设备上使用。我将模型转换为原型格式,并尝试通过TensorFlow用给定的代码将其转换:
converter = tf.lite.TFLiteConverter.from_frozen_graph('gru.pb', input_arrays=['input_array'], output_arrays=['output_array'])
tflite_model = converter.convert()
执行此操作会运行一段时间,然后出现以下错误:
F tensorflow/lite/toco/tooling_util.cc:1455] Should not get here: 5
所以我查找了该文件,并显示以下内容:
void MakeArrayDims(int num_dims, int batch, int height, int width, int depth,
std::vector<int>* out_dims) {
CHECK(out_dims->empty());
if (num_dims == 0) {
return;
} else if (num_dims == 1) {
CHECK_EQ(batch, 1);
*out_dims = {depth};
} else if (num_dims == 2) {
*out_dims = {batch, depth};
} else if (num_dims == 3) {
CHECK_EQ(batch, 1);
*out_dims = {height, width, depth};
} else if (num_dims == 4) {
*out_dims = {batch, height, width, depth};
} else {
LOG(FATAL) << "Should not get here: " << num_dims;
}
}
这似乎是正确的,因为我使用的是5个维度:[Batch, Sequence, Height, Width, Channels]
Google在此问题上对我没有太大帮助,但也许我使用了错误的搜索词。
那么有什么办法可以避免这个错误,或者tf-lite根本不支持序列?
ps。 我正在给定的docker容器中使用TensorFlow 1.14和python3。