使用Keras预先训练的接收v3/Exception模型时预测不正确

使用Keras预先训练的接收v3/Exception模型时预测不正确,keras,deep-learning,tensorflow.js,pre-trained-model,Keras,Deep Learning,Tensorflow.js,Pre Trained Model,我正试图让预先训练好的Keras接收v3/Exception模型在tensorflow.js中工作。模型的负载非常好,但是输出预测远远不正确(参见InceptionV3预测照片) 我还保存/转换了ResNet50模型,该模型运行良好 这些模型目前是否与tensorflow.js完全不兼容?还是我的代码有问题 模型通过以下方式保存/转换: from keras.applications import inception_v3 model = inception_v3.InceptionV3(inc

我正试图让预先训练好的Keras接收v3/Exception模型在tensorflow.js中工作。模型的负载非常好,但是输出预测远远不正确(参见InceptionV3预测照片)

我还保存/转换了ResNet50模型,该模型运行良好

这些模型目前是否与tensorflow.js完全不兼容?还是我的代码有问题

模型通过以下方式保存/转换:

from keras.applications import inception_v3
model = inception_v3.InceptionV3(include_top=True, weights='imagenet')
model.save("InceptionV3.h5", False)

tensorflowjs_converter --input_format=keras InceptionV3.h5 InceptionV3
此处提供代码(angular应用程序):

重要的部分是:

版本:

  • 铬:72.0.3626.109
  • @张量流/tfjs@1.0.0-阿尔法3


我已经解决了这个问题,以备将来参考。结果是,在将图像输入模型之前,我没有将图像标准化到[-1,1]范围内 但是,我不知道为什么ResNet50没有标准化就可以工作

规范化代码:

 let tensor = tf.browser.fromPixels(canvas, number_channels);
 let normalizationOffset = tf.scalar(127.5);
 var normalized = tensor.toFloat().sub(normalizationOffset).div(normalizationOffset);
 var batched = resized.reshape([1, imgSize, imgSize, 3]);
 var output = model.predict(batched) as any;

您可能希望添加其他标签,如
keras
预训练模式
深度学习
,以增加获得响应的机会。只是好奇:您是否计划在browser或node.js中使用InceptionV3模式?该模型的层数相当大(>300),在浏览器中可能运行速度不够快。我尝试将InceptionV3转换为TF.js格式,并将其加载到TF.js(Node.js和浏览器)。(Python)Keras和JavaScript的结果确实不同。但差异大多很小(感谢大家的关注!在我的例子中,TF.js的预测结果远远不正确,TF.js的前三名结果是:(扁形虫,扁形虫“,1),(水壶,水壶”,2.24e-18),(双筒望远镜,望远镜,望远镜,歌剧眼镜”,1.84e-22),而当我使用Keras进行测试时,前三名结果是:('tabby',0.44),(‘埃及猫’,0.25),(‘老虎猫’,0.062)如果您能够接收到准确的预测,则我转换模型的方式或图像输入过程一定有问题。这可能是由于TF.js的webGL后端处理1x1 conv2d内核的方式存在错误。请参阅上的跟踪问题,对于由此带来的不便,深表歉意。我们将尽快修复它。