我正在尝试将具有两个双向 GRU 层的自定义 Keras 模型转换为 tf-lite 以在移动设备上使用。我将我的模型转换为 protobuff 格式,并尝试使用 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]
谷歌在这个问题上没有给我太多帮助,但也许我使用了错误的搜索词。
那么有什么办法可以避免这个错误,还是 tf-lite 根本不支持序列?
附言。我在给定的 docker 容器中使用 TensorFlow 1.14 和 python3。