运行TFLite解释器时,将包含浮点数的ByteBuffer作为输入,应用程序会引发异常:
"数据类型错误:无法解析java.lang.浮点数的数据类型"
模型本身在Keras上进行训练,然后转换为TF,然后再转换为TFLite。
对于转换,我使用了TF(1.5.0版)toco转换器。
toco的输入参数:
toco——输入文件=已转换。pb—输出文件=模型。tflite--输入\格式=TENSORFLOW \ GRAPHDEF--输入\形状=1224224,3--输入\数组=主\输入--输出\数组=主\输出/Sigmoid--推断\类型=浮点--输出\格式=tflite--输入\类型=浮点
代替ByteBuffer,我还手动创建了一个浮点[][][][] 数组,其尺寸预计由模型输入:[1,224,224,3]
导致与ByteBuffer相同的错误。
请注意,我将浮点除以255,以获得[0,1]范围内的像素值。
import org.tensorflow.lite.Interpreter;
import java.nio.ByteBuffer;
public Interpreter tflite;
tflite = new Interpreter(loadModelFile(Test_TFLite.this,modelFile));
ByteBuffer bytebuffer_float = convertBitmapToByteBuffer_float(image, 1,
224, 3);
float out = 0;
tflite.run(bytebuffer_float,out);
private ByteBuffer convertBitmapToByteBuffer_float(Bitmap bitmap, int
BATCH_SIZE, int inputSize, int PIXEL_SIZE) {
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(4 * BATCH_SIZE *
inputSize * inputSize * PIXEL_SIZE); //float_size = 4 bytes
byteBuffer.order(ByteOrder.nativeOrder());
int[] intValues = new int[inputSize * inputSize];
bitmap.getPixels(intValues, 0, bitmap.getWidth(), 0, 0,
bitmap.getWidth(), bitmap.getHeight());
int pixel = 0;
for (int i = 0; i < inputSize; ++i) {
for (int j = 0; j < inputSize; ++j) {
final int val = intValues[pixel++];
byteBuffer.putFloat( ((val >> 16) & 0xFF)* (1.f/255.f));
byteBuffer.putFloat( ((val >> 8) & 0xFF)* (1.f/255.f));
byteBuffer.putFloat( (val & 0xFF)* (1.f/255.f));
}
}
return byteBuffer;
}
我期望一个范围[0,1]内的单个浮点值作为输出。由于解释器抛出异常,因此没有实际输出。
"数据类型错误:无法解析java.lang.浮点数的数据类型"
我从来没有用过TF-LiteJava自己。但是,根据文档,tflite.run()
的两个参数都必须是张量。但是对于输出
参数,您只传递一个浮点
。所以,我很确定这是您错误“无法解析java.lang.浮点数的数据类型”的根本原因。
注:根据文档,还支持原始ByteBuffer
s以及支持的数据类型的多维数组(float
,int
,long
,byte
)。因此,您的两种方法,ByteBuffer
和float[][]
都应该有效。您只需对输出执行相同的操作。
当运行TFLite解释器将包含浮点的ByteBuffer作为输入时,应用程序抛出一个异常: “数据类型错误:无法解析java.lang.float的数据类型” 模型本身是在Keras上训练的,然后转换成TF,再转换成TFLITE。 我希望有一个范围为[0,1]的浮点值作为输出。解释器抛出异常时没有实际输出。 “数据类型错误:无法解析java.lang.float的数据类型”
我正在尝试创建一个JupyterLab扩展,它使用typescript。 我已经成功地添加了包“@类型/节点”,允许我使用诸如“要求”(“超文本传输协议”)这样的包。 但一旦我尝试使用子进程,使用“require”(“child_process”),我在尝试构建扩展时就会出现以下错误。 我在谷歌上搜索过,但仍然不知道如何解决这个问题。 如有任何提示或信息,将不胜感激。 我的包裹。json文件。
现在我正在尝试从git运行克隆应用程序https://github.com/frinder/frinder-app但问题是该应用程序制作了很长时间,所以应该改变bulid.gradle 但是当我尝试相同的同步实现“com.android.支持:动画矢量可绘制:28.0.0”,但如果我删除它,请继续向我显示错误28.0.0它显示如下 但我不知道是什么造成了不完全相同的版本 这是应用程序build.g
我不熟悉node。js。这是我的包裹。json文件 在heroku服务器上,我得到了这些错误日志 我在npm git上收到这些错误。谁能解决这个问题。 0信息如果以“确定”结尾,则有效 1 verbose cli[“C:\Program Files\nodejs\\node.exe”, 1详细的cli'C:\Program Files\nodejs\node_modules\npm\bin\npm
我正试图为Spring编写一个Junit测试用例,经过大量阅读,我得到了一个返回text/plain的方法的所有工作。当我试图返回application/json时,遇到了问题。 关于SO的共识似乎是:使用mvc:注释驱动。我尝试了这个(通过创建spring-web-servlet.xml如下所示根据这里。然而,这并没有解决我的问题。有人知道我还做错了什么吗? SpringWebservlet。x
问题内容: 我们有一个使用AJAX的Sharepoint解决方案。触发此操作的按钮在更新面板中。 我们要做的一件事是生成MS Word文档,然后在客户端上打开该文档,以便可以打印它。 将文档发送到客户端的代码如下所示: 我们得到的错误是: 我们可以先将文档保存在Sharepoint中,然后再从Sharepoint中打开它,但是我们不希望这样做。 问题答案: 导致该代码执行的动作必须是回发事件,而不