类型为 UINT8 的 TensorFlowLite 张量和类型为 [[F 的 Java 对象(与 TensorFlowLite 类型 FLOAT32 兼容)
TensorFlowLite tensor with type UINT8 and a Java object of type [[F (which is compatible with the TensorFlowLite type FLOAT32)
我正在创建一个可以使用 flutter 识别图像的移动应用程序,但在测试该应用程序时遇到了这个运行时间错误。
Caused by: java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite tensor with type UINT8 and a Java object of type [[F (which is compatible with the TensorFlowLite type FLOAT32).
我使用 TensorFlow lite 图像分类和 运行 在 Google Colab
上训练我的自定义模型
阅读了一些文档之后。 TensorFlow Lite 模型应该有 Post-Training 量化。 See here at Image Classification with TensorFlow Lite
运行此命令定义量化配置。
config = QuantizationConfig.for_float16()
然后使用配置导出 TensorFlow Lite 模型。
model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
使用配置导出 TensorFlow Lite 模型标签
model.export(export_dir='.', quantization_config=config,export_format=ExportFormat.LABEL)
在您的代码中将输出从 float 更改为 byte
最后从字节数据中获取浮点值。
之前:
float[][] labelProb = new float[1][labels.size()];
for (int i = 0; i < labels.size(); ++i) {
float confidence = labelProb[0][i];
}
之后:
byte[][] labelProb = new byte[1][labels.size()];
for (int i = 0; i < labels.size(); ++i) {
float confidence = (float)labelProb[0][i];
}
我正在创建一个可以使用 flutter 识别图像的移动应用程序,但在测试该应用程序时遇到了这个运行时间错误。
Caused by: java.lang.IllegalArgumentException: Cannot convert between a TensorFlowLite tensor with type UINT8 and a Java object of type [[F (which is compatible with the TensorFlowLite type FLOAT32).
我使用 TensorFlow lite 图像分类和 运行 在 Google Colab
上训练我的自定义模型阅读了一些文档之后。 TensorFlow Lite 模型应该有 Post-Training 量化。 See here at Image Classification with TensorFlow Lite
运行此命令定义量化配置。
config = QuantizationConfig.for_float16()
然后使用配置导出 TensorFlow Lite 模型。
model.export(export_dir='.', tflite_filename='model_fp16.tflite', quantization_config=config)
使用配置导出 TensorFlow Lite 模型标签
model.export(export_dir='.', quantization_config=config,export_format=ExportFormat.LABEL)
在您的代码中将输出从 float 更改为 byte 最后从字节数据中获取浮点值。
之前:
float[][] labelProb = new float[1][labels.size()];
for (int i = 0; i < labels.size(); ++i) {
float confidence = labelProb[0][i];
}
之后:
byte[][] labelProb = new byte[1][labels.size()];
for (int i = 0; i < labels.size(); ++i) {
float confidence = (float)labelProb[0][i];
}