Tensorflow 训练模型在云端机器上工作,但在我的本地电脑上使用时出错
Posted
技术标签:
【中文标题】Tensorflow 训练模型在云端机器上工作,但在我的本地电脑上使用时出错【英文标题】:Tensorflow trained model works on cloud machine but gives an error when used in my local pc 【发布时间】:2018-06-06 11:31:49 【问题描述】:我尝试在paperspace
云桌面中创建自定义对象检测器,然后在Jupyter Notebook
上进行了尝试,它可以工作。
现在,我已上传整个 models-master
文件夹并将其下载到我的本地计算机上。
我使用Jupyter Notebook
运行它,现在它给出了InvalidArgumentError
。我尝试使用在云上训练的相同 ckpt 在本地机器上重新导出推理图,但它仍然无法正常工作。
InvalidArgumentError Traceback(最近调用 最后的) /usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在 _do_call(self, fn, *args) 1322 中尝试: -> 1323 return fn(*args) 1324 除了errors.OpError as e:
/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在 _run_fn(会话,feed_dict,fetch_list,target_list,选项, 运行元数据)1301 feed_dict, 获取列表,目标列表, -> 1302 状态,run_metadata) 1303
/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/errors_impl.py 在退出(自我,type_arg,value_arg,traceback_arg) 第472章 --> 473 c_api.TF_GetCode(self.status.status)) 474 # 从内存中删除底层状态对象,否则它保持活动状态
InvalidArgumentError: NodeDef 提到 attr 'T' not in Op index:int64>;节点定义: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"。 (检查您的 GraphDef 解释二进制文件是否是最新的 您的 GraphDef 生成二进制文件。)。 [[节点: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"]]
在处理上述异常的过程中,又发生了一个异常:
InvalidArgumentError Traceback(最近调用 最后)在() 20 (boxes, scores, classes, num) = sess.run( 21 [detection_boxes, detection_scores, detection_classes, num_detections], ---> 22 feed_dict=image_tensor: image_np_expanded) 23 # 检测结果的可视化。 24 vis_util.visualize_boxes_and_labels_on_image_array(
/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在运行中(self,fetches,feed_dict,options,run_metadata) 887尝试: 第888章 --> 889 run_metadata_ptr) 890 如果运行元数据: 第891章
/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在 _run(self、handle、fetches、feed_dict、options、run_metadata) 1118 如果 final_fetches 或 final_targets 或(句柄和 feed_dict_tensor): 1119 结果 = self._do_run(handle, final_targets,final_fetches, -> 1120 feed_dict_tensor, options, run_metadata) 1121 else: 1122 results = []
/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在 _do_run(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)1315 如果句柄为无:1316 返回 self._do_call(_run_fn, self._session, feeds, fetches, 目标, -> 1317 选项,run_metadata) 1318 else: 1319 return self._do_call(_prun_fn, self._session, 处理、提要、获取)
/usr/local/lib/python3.5/dist-packages/tensorflow/python/client/session.py 在 _do_call(self, fn, *args) 1334 中,除了 KeyError: 1335 经过 -> 1336 raise type(e)(node_def, op, message) 1337 1338 def _extend_graph(self):
InvalidArgumentError: NodeDef 提到 attr 'T' not in Op index:int64>;节点定义: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"。 (检查您的 GraphDef 解释二进制文件是否是最新的 您的 GraphDef 生成二进制文件。)。 [[节点: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"]]
由操作引起 '后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where', 定义在:文件“/usr/lib/python3.5/runpy.py”,第 184 行,在 _run_module_as_main "main", mod_spec) 文件 "/usr/lib/python3.5/runpy.py",第 85 行,在 _run_code exec(代码,run_globals)文件“/home/ryan/.local/lib/python3.5/site-packages/ipykernel_launcher.py”, 第 16 行,在 app.launch_new_instance() 文件“/home/ryan/.local/lib/python3.5/site-packages/traitlets/config/application.py”, 第 658 行,在 launch_instance app.start() 文件“/home/ryan/.local/lib/python3.5/site-packages/ipykernel/kernelapp.py”, 第 477 行,开始 ioloop.IOLoop.instance().start() 文件“/home/ryan/.local/lib/python3.5/site-packages/zmq/eventloop/ioloop.py”, 第 177 行,开始 超级(ZMQIOLoop,self).start()文件“/home/ryan/.local/lib/python3.5/site-packages/tornado/ioloop.py”, 第 888 行,开始 handler_func(fd_obj,事件)文件“/home/ryan/.local/lib/python3.5/site-packages/tornado/stack_context.py”, 第 277 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件 "/home/ryan/.local/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py", 第 440 行,在 _handle_events 中 self._handle_recv() 文件“/home/ryan/.local/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py”, 第 472 行,在 _handle_recv self._run_callback(callback, msg) 文件 "/home/ryan/.local/lib/python3.5/site-packages/zmq/eventloop/zmqstream.py", 第 414 行,在 _run_callback 回调(*args,**kwargs)文件“/home/ryan/.local/lib/python3.5/site-packages/tornado/stack_context.py”, 第 277 行,在 null_wrapper 中 返回 fn(*args, **kwargs) 文件 "/home/ryan/.local/lib/python3.5/site-packages/ipykernel/kernelbase.py", 第 283 行,在调度程序中 返回 self.dispatch_shell(stream, msg) 文件“/home/ryan/.local/lib/python3.5/site-packages/ipykernel/kernelbase.py”, 第 235 行,在 dispatch_shell 中 处理程序(流,身份,味精)文件“/home/ryan/.local/lib/python3.5/site-packages/ipykernel/kernelbase.py”, 第 399 行,在 execute_request 中 user_expressions,allow_stdin)文件“/home/ryan/.local/lib/python3.5/site-packages/ipykernel/ipkernel.py”, 第 196 行,在 do_execute 中 res = shell.run_cell(代码,store_history=store_history,silent=silent)文件 "/home/ryan/.local/lib/python3.5/site-packages/ipykernel/zmqshell.py", 第 533 行,在 run_cell 中 返回 super(ZMQInteractiveShell, self).run_cell(*args, **kwargs) 文件 “/home/ryan/.local/lib/python3.5/site-packages/IPython/core/interactiveshell.py”, 第 2728 行,在 run_cell 中 交互性=交互性,编译器=编译器,结果=结果)文件 “/home/ryan/.local/lib/python3.5/site-packages/IPython/core/interactiveshell.py”, 第 2850 行,在 run_ast_nodes 如果self.run_code(代码,结果):文件“/home/ryan/.local/lib/python3.5/site-packages/IPython/core/interactiveshell.py”, 第 2910 行,在 run_code 中 exec(code_obj, self.user_global_ns, self.user_ns) 文件“”,第 7 行,在 tf.import_graph_def(od_graph_def, name='') 文件 "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/importer.py", 第 313 行,在 import_graph_def 中 op_def=op_def) 文件 "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", 第 2956 行,在 create_op 中 op_def=op_def) 文件 "/usr/local/lib/python3.5/dist-packages/tensorflow/python/framework/ops.py", 第 1470 行,在 init 中 self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
InvalidArgumentError(参见上面的回溯):NodeDef 提到 attr 'T' 不在操作索引中:int64>; 节点定义: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"。 (检查您的 GraphDef 解释二进制文件是否是最新的 您的 GraphDef 生成二进制文件。)。 [[节点: 后处理器/BatchMultiClassNonMaxSuppression/map/while/MultiClassNonMaxSuppression/FilterGreaterThan/Where = whereT=DT_BOOL, _device="/job:localhost/replica:0/task:0/device:GPU:0"]]
【问题讨论】:
也许你在云端使用 tensorflow-gpu,但在你的计算机上,你使用的是 tensorflow cpu 【参考方案1】:云和本地机器是否运行相同的 Python/Tensorflow 版本?有时,由于内部变量重命名,特定 Tensorflow 版本生成的检查点不向后兼容。
【讨论】:
以上是关于Tensorflow 训练模型在云端机器上工作,但在我的本地电脑上使用时出错的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中使用经过 Tensorflow 训练的机器学习模型
如何修复 tensorflow 中的“ValueError:空训练数据”错误