我在Tensorflow上还很陌生,我想导出一个极简主义模型以用于Intel的NCS。但是我无法开始。
我的目标是了解管道的工作原理,因此,我第一步是构建一个简单的图,该图只添加一个与输入大小相同的常数张量。 这就是我尝试过的:
import tensorflow as tf
tf.reset_default_graph()
X = tf.placeholder(dtype=tf.float32, shape=(2,2), name = "custom_in")
Y = tf.constant([[1,1],[1,1]], dtype=tf.float32)
Z = tf.add_n([X, Y], name="custom_out")
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
sess.run(tf.local_variables_initializer())
saver.save(sess, 'tmp/model-inference')
我也尝试过这个:
import tensorflow as tf
tf.reset_default_graph()
X = tf.placeholder(dtype=tf.float32, shape=(2,2), name = "custom_in")
Y = tf.constant([[1,1],[1,1]], dtype=tf.float32)
Z = tf.add_n([X, Y], name="custom_out")
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
tf.saved_model.simple_save(sess,
"./test",
inputs={"custom_in": X},
outputs={"custom_out": Z})
...但是我收到这些警告:
警告:tensorflow:来自 /usr/lib/python3.7/site-packages/tensorflow/python/saved_model/simple_save.py:85: 调用SavedModelBuilder.add_meta_graph_and_variables(从 tensorflow.python.saved_model.builder_impl)与legacy_init_op是 已过时,将在以后的版本中删除。说明 更新:将您的op传递给等效参数main_op。 INFO:tensorflow:将资产添加到图形。 INFO:tensorflow:没有资产 写。 INFO:tensorflow:SavedModel写入:./test/saved_model.pb
如果我尝试使用mvNCCompile进行编译,则会收到此错误:
2018-11-04 15:24:39 $>mvNCCompile saved_model.pb -s 12 -in=custom_in -on=custom_out -is 2 2 -o Test.graph
/usr/lib/python3.7/site-packages/networkx/classes/graph.py:23: 弃用警告:使用或从“集合”导入ABC 而不是from'collections.abc',而在3.8中 停止从集合导入映射工作 /usr/lib/python3.7/site-packages/networkx/classes/reportviews.py:95: 弃用警告:使用或从“集合”导入ABC 而不是from'collections.abc',而在3.8中 停止从集合导入映射,设置,可迭代的工作 /usr/lib/python3.7/site-packages/skimage/init.py:60: 弃用警告:不建议使用imp模块,而建议使用 importlib;有关其他用途,请参阅模块的文档
进口商品 /usr/lib/python3.7/site-packages/google/protobuf/internal/containers.py:182: 弃用警告:使用或从“集合”导入ABC 而不是from'collections.abc',而在3.8中 停止工作MutableMapping = collections.MutableMapping /usr/lib/python3.7/site-packages/google/protobuf/internal/containers.py:340: 弃用警告:使用或从“集合”导入ABC 而不是from'collections.abc',而在3.8中 停止工作collections.MutableSequence.register(BaseContainer) /usr/bin/ncsdk/Controllers/Parsers/TensorFlowParser/Convolution.py:44: 语法警告:断言始终为真,也许删除括号?
assert(False,“卷积不支持层类型:” + obj.type) /usr/bin/ncsdk/Controllers/Parsers/Phases.py:501:弃用警告: 无效的转义序列\“”“ /usr/bin/ncsdk/Controllers/Parsers/Phases.py:747:弃用警告: 无效的转义序列\“”“ mvNCCompile v02.00,版权所有@ Intel 公司2017/usr/bin/ncsdk/Controllers/TensorFlowParser.py:173: DeprecationWarning:无效的转义序列\ d追溯(最新 最后调用):文件“ / usr / bin / mvNCCompile”,行169,在 create_graph(args.network,args.image,args.inputnode,args.outputnode,args.outfile,args.nshaves,args.inputsize, args.weights,args.explicit_concat,args.ma2480,args.scheduler, args.new_parser,args)文件“ / usr / bin / mvNCCompile”,第148行,在 create_graph load_ret = load_network(args,parser,myriad_config)文件“ /usr/bin/ncsdk/Controllers/Scheduler.py”,第100行,在load_network中 parse_ret = parse_tensor(arguments,myriad_conf)文件“ /usr/bin/ncsdk/Controllers/TensorFlowParser.py”,第211行,在 parse_tensor graph_def.ParseFromString(f.read())文件“ /usr/lib/python3.7/site-packages/google/protobuf/message.py”,行 185,在ParseFromString中 self.MergeFromString(序列化)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/python_message.py”, 第1083行,在MergeFromString中 如果self._InternalParse(serialized,0,length)!=长度:文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/python_message.py”, InternalParse中的第1120行 pos = field_decoder(buffer,new_pos,end,self,field_dict)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, 第633行,在DecodeField中 如果value._InternalParse(buffer,pos,new_pos)!= new_pos:文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/python_message.py”, InternalParse中的第1120行 pos = field_decoder(buffer,new_pos,end,self,field_dict)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, DecodeRepeatedField中的第612行 如果value.add()._ InternalParse(buffer,pos,new_pos)!= new_pos:文件 “ /usr/lib/python3.7/site-packages/google/protobuf/internal/python_message.py”, InternalParse中的第1120行 pos = field_decoder(buffer,new_pos,end,self,field_dict)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, DecodeMap中的第743行 如果submsg._InternalParse(buffer,pos,new_pos)!= new_pos:文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/python_message.py”, InternalParse中的第1109行 new_pos = local_SkipField(buffer,new_pos,end,tag_bytes)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, SkipField中的第850行 返回WIRETYPE_TO_SKIPPER [wire_type](缓冲区,位置,结尾)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, _SkipGroup中的第799行 new_pos = SkipField(buffer,pos,end,tag_bytes)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, SkipField中的第850行 返回WIRETYPE_TO_SKIPPER [wire_type](缓冲区,位置,结尾)文件“ /usr/lib/python3.7/site-packages/google/protobuf/internal/decoder.py”, _SkipFixed32中的第814行 引发_DecodeError('截断的消息。')google.protobuf.message.DecodeError:截断的消息。
正确的方法是什么?
使用simple_save
和Saver
对象有什么区别?