我已使用Keras
在Transfer Learning
中创建了一个模型。
我将InceptionV3
模型用作base
,并将初始52
层用作non-trainable
。
然后,在其顶部添加我的custom
层。
对其进行了训练,并保存到hdf5
文件中。
该模型在我的A.png
上预测了laptop
。 Correct
我使用pb
工具将其转换为Github
文件。
然后,我根据A.png
上的pb
模型预测了laptop
。是correct
。
然后,我将pb
文件移到了android asset
文件夹中。
我对其添加了Tensorflow Mobile
依赖性(不是TensorflowLite
)。
我还向A.png
添加了相同的asset
。
我加载了模型并将A.png
传递给pb
模型。
输出为wrong
类。
我尝试了其他图像。它始终指向same wrong class
。
Output never changed
。
因此,我认为hdf5
,pb
模型是正确的,但是我的mistake
中有一些code which is passing the A.png to pb model
。请帮帮我!
resized_image
-> A.png的位图
inferenceInterface
->张量流模型接口
INPUT_NODE
->输入节点的名称
OUTPUT_NODE
->输出节点的名称
1,128,128,3
->图片为128x128和3个频道
imageValuesFloat = normalizeBitmap(resized_image,128,127.5f,1.0f);
inferenceInterface.feed(INPUT_NODE,imageValuesFloat,1,128,128,3);
inferenceInterface.run(OUTPUT_NODES);
//declare array to hold results obtained from model
float[] result = new float[OUTPUT_SIZE];
//copy the output into the result array
inferenceInterface.fetch(OUTPUT_NODE,result);
这里是normalizeBitmap
函数
public float[] normalizeBitmap(Bitmap source,int size,float mean,float std){
float[] output = new float[size * size * 3];
int[] intValues = new int[source.getHeight() * source.getWidth()];
source.getPixels(intValues, 0, source.getWidth(), 0, 0, source.getWidth(), source.getHeight());
for (int i = 0; i < intValues.length; ++i) {
final int val = intValues[i];
output[i * 3] = (((val >> 16) & 0xFF) - mean)/std;
output[i * 3 + 1] = (((val >> 8) & 0xFF) - mean)/std;
output[i * 3 + 2] = ((val & 0xFF) - mean)/std;
}
return output;
}