繁体   English   中英

如何将 cnn 网络的 tflite 文件拆分为每一层的 tflite 文件?

[英]How to split a tflite file for cnn network into tflite files for each layer?

我目前正在尝试找到一种方法来在 Android Stuio (java) 上运行时为 CNN 网络的每一层获取中间特性。 实际上,我在下面的链接中找到了一些相关的问题和答案。

如何从特定层获取输出张量?

从上面的链接,我认为按层划分模型将是解决我的任务的唯一方法。 但是,目前还没有将.tffile 拆分为多个.tffiles 的解决方案。

更准确地说,

  • 我拥有的文件:mobilefacenet 网络的 tflite 文件
  • 我必须制作的文件:mobilefacenet 每一层的 tflite 文件

如果您能告诉我执行上述任务的确切 python 代码,我将不胜感激。 非常感谢!

下面的代码是我的 android studio java 代码中与这个问题相关的部分。

/** Model loader **/
@SuppressWarnings("deprecation")
private void loadModel() {
    try {
        //model name
        String modelFile = "mobile_face_net.tflite";
        tfLite = new Interpreter(loadModelFile(MainActivity.this, modelFile));
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private MappedByteBuffer loadModelFile(AppCompatActivity activity, String MODEL_FILE) throws IOException {
    AssetFileDescriptor fileDescriptor = activity.getAssets().openFd(MODEL_FILE);
    FileInputStream inputStream = new FileInputStream(fileDescriptor.getFileDescriptor());
    FileChannel fileChannel = inputStream.getChannel();
    long startOffset = fileDescriptor.getStartOffset();
    long declaredLength = fileDescriptor.getDeclaredLength();
    return fileChannel.map(FileChannel.MapMode.READ_ONLY, startOffset, declaredLength);
}
tfLite.runForMultipleInputsOutputs(inputArray, outputMap); //Run model

有一种更简单的方法可以逐层输出。 来自 python 的 API 是这个选项

experimental_preserve_all_tensors

interpreter = tf.lite.Interpreter(
    model_path="test.tflite",
    experimental_preserve_all_tensors=True)

现在你可以在这个解释器上逐层检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM