Android Tensorflow模型输出权重具有不同的值
我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出为[1 128]数字与我的Android设备上生成的数字不同。输入图像在推理和输入输出形状上都是相同的,但在我的Android手机和Python TFlite模型上得到的输出向量仍然不同。我正在使用Firebase机器学习 安卓代码Android Tensorflow模型输出权重具有不同的值,android,tensorflow,kotlin,tensorflow-lite,firebase-machine-learning,Android,Tensorflow,Kotlin,Tensorflow Lite,Firebase Machine Learning,我正在开发一个需要ML模型集成的Android应用程序。为此,我使用TensorFlow lite进行部署。我使用基于自定义模型的暹罗网络进行输出,输出形状为[1 128]。当我在Google Colab上推断python中的tf lite模型时,输出为[1 128]数字与我的Android设备上生成的数字不同。输入图像在推理和输入输出形状上都是相同的,但在我的Android手机和Python TFlite模型上得到的输出向量仍然不同。我正在使用Firebase机器学习 安卓代码 val i
val interpreter=Interpreter(model)
val imageBitmap= Bitmap.createScaledBitmap(BitmapFactory.decodeFileDescriptor(contentResolver.openFileDescriptor(fileUri,"r")?.fileDescriptor),256,256,true)
val inputImage=ByteBuffer.allocateDirect(256*256*3*4).order(ByteOrder.nativeOrder())
for(ycord in 0 until 256){
for(xcord in 0 until 256){
val pixel=imageBitmap.getPixel(xcord,ycord)
inputImage.putFloat(Color.red(pixel)/1.0f)
inputImage.putFloat(Color.green(pixel)/1.0f)
inputImage.putFloat(Color.blue(pixel)/1.0f)
}
}
imageBitmap.recycle()
val modelOutput=ByteBuffer.allocateDirect(outputSize).order(ByteOrder.nativeOrder())
interpreter.run(inputImage,modelOutput)
modelOutput.rewind()
val probs=modelOutput.asFloatBuffer()
success(ImageProcessResult.Success(probs))
请帮帮我。我很快就需要它。非常感谢您的帮助。您正在Android平台上将位图调整为[256256]
即使输入向量的微小变化也会改变输出向量。调整位图大小时,会更改输入向量。但是,如果模型足够通用,则最终结果(分类中的)输出向量的argmax将是相同的
就暹罗语而言,如果模型没有过度拟合,我相信它不会以有意义的方式影响最终结果(相似性分数)。您能确认您输入模型的数值在两个平台上是相同的吗?你是调整图像大小、裁剪图像还是做其他事情?在Android上,我实际上是将位图大小调整为[256 256],但输入图像的尺寸与以前相同,所以我想这一定不重要,因为即使输入向量稍有变化也会改变输出向量。调整位图大小时,会更改输入向量。然而,最终结果是输出向量的argmax(在分类中)是相同的。好吧,但这不会影响我的暹罗输出吗?我相信如果模型没有过度拟合,它不会以有意义的方式影响最终结果。