发新帖

iOS加载pb模型创建session报错

[复制链接]
1019 5

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
PC上训练好的模型放到iOS上测试,加载pb文件创建session报错:

No OpKernel was registered to support Op 'Less' with these attrs.  Registered devices: [CPU], Registered kernels:
  device='CPU'; T in [DT_FLOAT]

[[Node: lstm/rnn/while/Less = Less[T=DT_INT32, _device="/device:GPU:0"](lstm/rnn/while/Merge, lstm/rnn/while/Less/Enter)]]


好像找不到这个节点呢,就算找到了,该怎么改呢。。。

WechatIMG25.jpeg WechatIMG24.jpeg

我知道答案 回答被采纳将会获得10 金币 + 20 金币 已有5人回答
本楼点评(2) 收起
  • yunhai_luo无脑搬运一个可能的解决方案:Github上提到过这个问题(https://github.com/tensorflow/tensorflow/issues/9476),JieHe96给出了一个解决方案,而且给出了一个例子(https://github.com/JieHe96/iOS_Tensorflow_ObjectDetection_Example/blob/master/README.md),楼主或许可以尝试一下?
    2018-4-28 00:20 回复
  • tensorfyx今天准备让iOS开发同事试试
    2018-4-28 08:58 回复

精彩评论5

M丶Sulayman  TF豆豆  发表于 2018-4-27 18:50:35 | 显示全部楼层
节点好多啊我的命名咋就有那么多问题呢
  1. https://www.tensorflowers.cn/t/420
复制代码
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-4-27 19:35:01 | 显示全部楼层
你的 ios 环境是怎么搭建的呀?
是用 tf lite 吗?
本楼点评(3) 收起
  • tensorfyxiOS环境搭建,官方有教程的啊。不用TFLite,那天看官方推送文章,好像TFLite对RNN神经网络的算子支持还不够,我们使用TFMobile方案。
    2018-4-28 08:59 回复
  • 舟3332回复 tensorfyx : 你说的是这个吗? https://www.tensorflow.org/mobile/ios_build
    2018-4-28 09:53 回复
  • tensorfyx回复 舟3332 :是的,没错。
    2018-4-28 10:16 回复
tensorfyx  TF豆豆  发表于 2018-4-28 17:42:38 来自手机  | 显示全部楼层

安卓也报了错 看来有些坑还是要踩一踩
04-28 10:19:20.762 13599-13626/? E/TensorFlowInferenceInterface: Failed to run TensorFlow inference with inputs:[fyx_inputs], outputs:[fyx_dense_decoded]
04-28 10:19:20.763 13599-13626/? E/AndroidRuntime: FATAL EXCEPTION: inference
                                                   Process: org.tensorflow.demo, PID: 13599
                                                   java.lang.IllegalArgumentException: No OpKernel was registered to support Op 'SparseToDense' with these attrs.  Registered devices: [CPU], Registered kernels:
                                                     device='CPU'; T in [DT_STRING]; Tindices in [DT_INT64]
                                                     device='CPU'; T in [DT_STRING]; Tindices in [DT_INT32]
                                                     device='CPU'; T in [DT_BOOL]; Tindices in [DT_INT64]
                                                     device='CPU'; T in [DT_BOOL]; Tindices in [DT_INT32]
                                                     device='CPU'; T in [DT_FLOAT]; Tindices in [DT_INT64]
                                                     device='CPU'; T in [DT_FLOAT]; Tindices in [DT_INT32]
                                                     device='CPU'; T in [DT_INT32]; Tindices in [DT_INT64]
                                                     device='CPU'; T in [DT_INT32]; Tindices in [DT_INT32]
                                                   
                                                            [[Node: fyx_dense_decoded = SparseToDense[T=DT_INT64, Tindices=DT_INT64, validate_indices=true, _device="/device:GPU:0"](CTCBeamSearchDecoder, CTCBeamSearchDecoder:2, CTCBeamSearchDecoder:1, fyx_dense_decoded/default_value)]]
                                                       at org.tensorflow.Session.run(Native Method)
                                                       at org.tensorflow.Session.access$100(Session.java:48)
                                                       at org.tensorflow.Session$Runner.runHelper(Session.java:298)
                                                       at org.tensorflow.Session$Runner.run(Session.java:248)
                                                       at org.tensorflow.contrib.android.TensorFlowInferenceInterface.run(TensorFlowInferenceInterface.java:218)
                                                       at org.tensorflow.demo.TensorFlowImageClassifier.recognizeImage(TensorFlowImageClassifier.java:160)
                                                       at org.tensorflow.demo.ClassifierActivity$2.run(ClassifierActivity.java:172)
                                                       at android.os.Handler.handleCallback(Handler.java:754)
                                                       at android.os.Handler.dispatchMessage(Handler.java:95)
                                                       at android.os.Looper.loop(Looper.java:163)
                                                       at android.os.HandlerThread.run(HandlerThread.java:61)
本楼点评(0) 收起
舟3332  TF芽芽  发表于 2018-5-2 18:01:44 | 显示全部楼层
tensorfyx 发表于 2018-4-28 17:42
安卓也报了错 看来有些坑还是要踩一踩
04-28 10:19:20.762 13599-13626/? E/TensorFlowInferenceInterface ...

错误信息说的是 DT_INT64 不被支持哈。

你可以参考下这篇文章 https://github.com/tensorflow/tensorflow/issues/13651

把输入转换成 int32 再试试哟~
本楼点评(4) 收起
  • tensorfyx好的,我试试。
    2018-5-3 08:45 回复
  • tensorfyxencountered the same problem.
    you are sending int64 where only int32 is accepted
    solved it by adding casting to the python code that is building the graph
    decoded, _ = tf.nn.ctc_beam_search_decoder(logit.sg_transpose(perm=[1, 0, 2]), seq_len, merge_repeated=False)
    y = tf.sparse_to_dense( tf.to_int32(decoded[0].indices), tf.to_int32(decoded[0].dense_shape), tf.to_int32(decoded[0].values), name="output_node" )

    用你发的链接里这种方法修改之后重新构建图、导出pb模型,安卓已经可以跑起来了。原来是lstm这个计算是int64的,强制改为int32安卓就不报错了。多谢。
    2018-5-4 08:37 回复
  • tensorfyx接下来继续踩iOS的坑。
    2018-5-4 08:39 回复
  • 舟3332回复 tensorfyx : 哈哈 加油
    2018-5-8 14:07 回复
neverchange  TF豆豆  发表于 2018-7-4 00:26:13 | 显示全部楼层
android也有32位和64位的区别,ios应该是固定的。
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表