如何解决在CoreML中,潜在向量方差比PyTorch大得多
我有一个PyTorch模型,已经转换为CoreML。在PyTorch中,推断的潜在向量的值范围在±1.6左右,但转换后的mlmodel的变化幅度最大为±55.0。是什么原因导致这种巨大差异?转换非常简单:
encoder = Encoder_CNN(latent_dim,n_c)
enc_fname = os.path.join(models_dir,encoder.name + '_153.pth.tar')
encoder.load_state_dict(torch.load(enc_fname,map_location={'cuda:0': 'cpu'}))
encoder.cpu()
encoder.eval()
img_in = torch.rand(1,1,28,28).cpu()
traced_encoder_model = torch.jit.trace(encoder,img_in)
traced_encoder_model.save("{}_encoder_mobile_{}_{}.pt".format(model_type,latent_dim,n_c))
coreml_encoder = ct.convert(traced_encoder_model,inputs=[ct.ImageType(name=name,shape=img_in.shape)])
coreml_encoder.save("{}_encoder_{}_{}.mlmodel".format(model_type,n_c))
解决方法
您可能正在对PyTorch和Core ML使用不同的输入规范化。您的img_in
包含0到1之间的值。我看不到Core ML的推理代码,但是您的输入像素可能在0到255之间。当您将PyTorch模型转换为Core ML时,可以通过指定图像预处理设置来解决此问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。