我在Java和机器学习方面遇到了一个小问题。我已经用Keras训练了一个模型,当我使用Python预测图像时,它可以正常工作。
训练模型的形状是[ width,height,RGB ]。
但是当我在Java中加载一个图像时,我得到了[ RGB,width,height] -所以我尝试使用.reshape()来改变形状,但我显然搞砸了,因为所有的预测都是错误的:
ResizeImageTransform rit = new ResizeImageTransform(128, 128);
NativeImageLoader loader = new NativeImageLoader(128, 128, 3, rit);
INDArray features = loader.asMatrix(f); // GIVES ME A SHAPE OF 1, 3, 128, 128
features = features.reshape(1, 128, 128, 3); // GIVES ME THE SHAPE 1, 128, 128, 3 AS NEEDED
INDArray[] prediction = model.output(features); // all predictions wrong
我不是Java开发人员,我试图与文档相处,但在这里我显然忽略了一些东西。也许这里有人可以给予出我做错了什么的提示...
4条答案
按热度按时间wpcxdonn1#
所以现在我的测试集至少有136个图像被标记。Python版本标记了195个图像...
所以我想标准化是个问题。我用以下方法训练模型:
我用
在测试脚本中的预测之前。
在Java中,我使用
但我不确定是否规范化是问题所在,或者我是否已经为.permute()添加了参数...
有什么建议吗?
46qrfjad2#
这就是模型的训练方式:
这是我在Python中测试图像的代码:
这就是我在Java中测试图像的代码:
cclgggtu3#
巨蟒
java
我所要做的就是交换C和A,模型就会很好地工作。我只是不知道怎么做。
7fhtutme4#
我是说我可以解决这个问题
但一定有更好/更好的解决方案。