尝试这个:
运行Python
>>> import tensorflow as tf
>>> gf = tf.GraphDef()
>>> gf.ParseFromString(open('/your/path/to/graphname.pb','rb').read())
and then
>>> [n.name + '=>' + n.op for n in gf.node if n.op in ( 'Softmax','Placeholder')]
然后,你可以得到类似这样的结果:
['Mul=>Placeholder', 'final_result=>Softmax']
但我不确定这是关于错误消息的节点名称的问题。
我猜您在加载图形文件时提供了错误的论点,或者您生成的图形文件有问题?
检查这部分:
E/AndroidRuntime(16821): java.lang.IllegalArgumentException: Incompatible
shapes: [1,224,224,3] vs. [32,1,1,2048]
UPDATE:对不起,
如果您正在使用(重新)训练的图表,请尝试以下操作:
[n.name + '=>' + n.op for n in gf.node if n.op in ( 'Softmax','Mul')]
似乎(重新)训练的图将输入/输出操作名称保存为“Mul”和“Softmax”,而优化和/或量化的图将它们保存为“Placeholder”和“Softmax”。
BTW,根据 Peter Warden 的帖子,不建议在移动环境中使用重新训练的图:https://petewarden.com/2016/09/27/tensorflow-for-mobile-poets/ https://petewarden.com/2016/09/27/tensorflow-for-mobile-poets/。由于性能和文件大小问题,最好使用量化或内存映射图,但我无法找到如何在 Android 中加载内存映射图...:(
(在android中加载优化/量化图没有问题)