| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
1 parent a174e71 commit 5c93dbd
12 files changed
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -40,6 +40,7 @@ py_library( | |||
| 40 | 40 | ":summary", | |
| 41 | 41 | ":training", | |
| 42 | 42 | "//tensorflow/contrib:contrib_py", | |
| 43 | + "//tensorflow/python/debug:debug_py", | ||
| 43 | 44 | ], | |
| 44 | 45 | ) | |
| 45 | 46 | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -15,6 +15,17 @@ exports_files(["LICENSE"]) | |||
| 15 | 15 | ||
| 16 | 16 | load("//tensorflow:tensorflow.bzl", "cuda_py_test") | |
| 17 | 17 | ||
| 18 | + py_library( | ||
| 19 | + name = "debug_py", | ||
| 20 | + srcs = ["__init__.py"], | ||
| 21 | + srcs_version = "PY2AND3", | ||
| 22 | + deps = [ | ||
| 23 | + ":debug_data", | ||
| 24 | + ":debug_utils", | ||
| 25 | + ":local_cli_wrapper", | ||
| 26 | + ], | ||
| 27 | + ) | ||
| 28 | + | ||
| 18 | 29 | py_library( | |
| 19 | 30 | name = "debug_data", | |
| 20 | 31 | srcs = ["debug_data.py"], | |
@@ -32,7 +43,7 @@ py_library( | |||
| 32 | 43 | ||
| 33 | 44 | py_library( | |
| 34 | 45 | name = "framework", | |
| 35 | - srcs = ["framework.py"], | ||
| 46 | + srcs = ["wrappers/framework.py"], | ||
| 36 | 47 | srcs_version = "PY2AND3", | |
| 37 | 48 | deps = [ | |
| 38 | 49 | ":debug_utils", | |
@@ -82,8 +93,8 @@ py_library( | |||
| 82 | 93 | ) | |
| 83 | 94 | ||
| 84 | 95 | py_library( | |
| 85 | - name = "local_cli", | ||
| 86 | - srcs = ["local_cli.py"], | ||
| 96 | + name = "local_cli_wrapper", | ||
| 97 | + srcs = ["wrappers/local_cli_wrapper.py"], | ||
| 87 | 98 | srcs_version = "PY2AND3", | |
| 88 | 99 | deps = [ | |
| 89 | 100 | ":analyzer_cli", | |
@@ -99,19 +110,14 @@ py_binary( | |||
| 99 | 110 | name = "debug_fibonacci", | |
| 100 | 111 | srcs = ["examples/debug_fibonacci.py"], | |
| 101 | 112 | srcs_version = "PY2AND3", | |
| 102 | - deps = [ | ||
| 103 | - ":local_cli", | ||
| 104 | - "//tensorflow:tensorflow_py", | ||
| 105 | - ], | ||
| 113 | + deps = ["//tensorflow:tensorflow_py"], | ||
| 106 | 114 | ) | |
| 107 | 115 | ||
| 108 | 116 | py_binary( | |
| 109 | 117 | name = "debug_mnist", | |
| 110 | 118 | srcs = ["examples/debug_mnist.py"], | |
| 111 | 119 | srcs_version = "PY2AND3", | |
| 112 | 120 | deps = [ | |
| 113 | - ":debug_data", | ||
| 114 | - ":local_cli", | ||
| 115 | 121 | "//tensorflow:tensorflow_py", | |
| 116 | 122 | "//tensorflow/examples/tutorials/mnist:input_data", | |
| 117 | 123 | ], | |
@@ -151,9 +157,7 @@ py_test( | |||
| 151 | 157 | py_test( | |
| 152 | 158 | name = "framework_test", | |
| 153 | 159 | size = "small", | |
| 154 | - srcs = [ | ||
| 155 | - "framework_test.py", | ||
| 156 | - ], | ||
| 160 | + srcs = ["wrappers/framework_test.py"], | ||
| 157 | 161 | srcs_version = "PY2AND3", | |
| 158 | 162 | deps = [ | |
| 159 | 163 | ":debug_data", | |
@@ -255,14 +259,14 @@ cuda_py_test( | |||
| 255 | 259 | ) | |
| 256 | 260 | ||
| 257 | 261 | py_test( | |
| 258 | - name = "local_cli_test", | ||
| 262 | + name = "local_cli_wrapper_test", | ||
| 259 | 263 | size = "small", | |
| 260 | 264 | srcs = [ | |
| 261 | - "local_cli_test.py", | ||
| 265 | + "wrappers/local_cli_wrapper_test.py", | ||
| 262 | 266 | ], | |
| 263 | 267 | srcs_version = "PY2AND3", | |
| 264 | 268 | deps = [ | |
| 265 | - ":local_cli", | ||
| 269 | + ":local_cli_wrapper", | ||
| 266 | 270 | "//tensorflow:tensorflow_py", | |
| 267 | 271 | "//tensorflow/python:framework_test_lib", | |
| 268 | 272 | ], | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -0,0 +1,31 @@ | |||
| 1 | + # Copyright 2016 The TensorFlow Authors. All Rights Reserved. | ||
| 2 | + # | ||
| 3 | + # Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 4 | + # you may not use this file except in compliance with the License. | ||
| 5 | + # You may obtain a copy of the License at | ||
| 6 | + # | ||
| 7 | + # http://www.apache.org/licenses/LICENSE-2.0 | ||
| 8 | + # | ||
| 9 | + # Unless required by applicable law or agreed to in writing, software | ||
| 10 | + # distributed under the License is distributed on an "AS IS" BASIS, | ||
| 11 | + # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 12 | + # See the License for the specific language governing permissions and | ||
| 13 | + # limitations under the License. | ||
| 14 | + # ============================================================================== | ||
| 15 | + """Public Python API of TensorFlow Debugger (tfdbg).""" | ||
| 16 | + | ||
| 17 | + from __future__ import absolute_import | ||
| 18 | + from __future__ import division | ||
| 19 | + from __future__ import print_function | ||
| 20 | + | ||
| 21 | + # pylint: disable=unused-imports | ||
| 22 | + from tensorflow.python.debug.debug_data import DebugDumpDir | ||
| 23 | + from tensorflow.python.debug.debug_data import DebugTensorDatum | ||
| 24 | + from tensorflow.python.debug.debug_data import has_inf_or_nan | ||
| 25 | + from tensorflow.python.debug.debug_data import load_tensor_from_event_file | ||
| 26 | + | ||
| 27 | + from tensorflow.python.debug.debug_utils import add_debug_tensor_watch | ||
| 28 | + from tensorflow.python.debug.debug_utils import watch_graph | ||
| 29 | + from tensorflow.python.debug.debug_utils import watch_graph_with_blacklists | ||
| 30 | + | ||
| 31 | + from tensorflow.python.debug.wrappers.local_cli_wrapper import LocalCLIDebugWrapperSession | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -78,7 +78,7 @@ def parse_node_or_tensor_name(name): | |||
| 78 | 78 | return name, None | |
| 79 | 79 | ||
| 80 | 80 | ||
| 81 | - def get_tensor_name(node_name, output_slot): | ||
| 81 | + def _get_tensor_name(node_name, output_slot): | ||
| 82 | 82 | """Get tensor name given node name and output slot index. | |
| 83 | 83 | ||
| 84 | 84 | Args: | |
@@ -92,7 +92,7 @@ def get_tensor_name(node_name, output_slot): | |||
| 92 | 92 | return "%s:%d" % (node_name, output_slot) | |
| 93 | 93 | ||
| 94 | 94 | ||
| 95 | - def get_tensor_watch_key(node_name, output_slot, debug_op): | ||
| 95 | + def _get_tensor_watch_key(node_name, output_slot, debug_op): | ||
| 96 | 96 | """Get the string representation of a debug watch on a tensor. | |
| 97 | 97 | ||
| 98 | 98 | Args: | |
@@ -106,10 +106,10 @@ def get_tensor_watch_key(node_name, output_slot, debug_op): | |||
| 106 | 106 | A string representing the debug watch on the tensor (i.e., the "watch | |
| 107 | 107 | key"). | |
| 108 | 108 | """ | |
| 109 | - return "%s:%s" % (get_tensor_name(node_name, output_slot), debug_op) | ||
| 109 | + return "%s:%s" % (_get_tensor_name(node_name, output_slot), debug_op) | ||
| 110 | 110 | ||
| 111 | 111 | ||
| 112 | - def is_copy_node(node_name): | ||
| 112 | + def _is_copy_node(node_name): | ||
| 113 | 113 | """Determine whether a node name is that of a debug Copy node. | |
| 114 | 114 | ||
| 115 | 115 | Such nodes are inserted by TensorFlow core upon request in | |
@@ -125,7 +125,7 @@ def is_copy_node(node_name): | |||
| 125 | 125 | return node_name.startswith("__copy_") | |
| 126 | 126 | ||
| 127 | 127 | ||
| 128 | - def is_debug_node(node_name): | ||
| 128 | + def _is_debug_node(node_name): | ||
| 129 | 129 | """Determine whether a node name is that of a debug node. | |
| 130 | 130 | ||
| 131 | 131 | Such nodes are inserted by TensorFlow core upon request in | |
@@ -140,7 +140,7 @@ def is_debug_node(node_name): | |||
| 140 | 140 | return node_name.startswith("__dbg_") | |
| 141 | 141 | ||
| 142 | 142 | ||
| 143 | - def parse_debug_node_name(node_name): | ||
| 143 | + def _parse_debug_node_name(node_name): | ||
| 144 | 144 | """Parse the name of a debug node. | |
| 145 | 145 | ||
| 146 | 146 | Args: | |
@@ -282,7 +282,7 @@ def output_slot(self): | |||
| 282 | 282 | ||
| 283 | 283 | @property | |
| 284 | 284 | def tensor_name(self): | |
| 285 | - return get_tensor_name(self.node_name, self.output_slot) | ||
| 285 | + return _get_tensor_name(self.node_name, self.output_slot) | ||
| 286 | 286 | ||
| 287 | 287 | @property | |
| 288 | 288 | def watch_key(self): | |
@@ -291,7 +291,8 @@ def watch_key(self): | |||
| 291 | 291 | Returns: | |
| 292 | 292 | A watch key, in the form of <tensor_name>:<debug_op>. | |
| 293 | 293 | """ | |
| 294 | - return get_tensor_watch_key(self.node_name, self.output_slot, self.debug_op) | ||
| 294 | + return _get_tensor_watch_key(self.node_name, self.output_slot, | ||
| 295 | + self.debug_op) | ||
| 295 | 296 | ||
| 296 | 297 | @property | |
| 297 | 298 | def file_path(self): | |
@@ -467,12 +468,12 @@ def _load_partition_graphs(self, partition_graphs): | |||
| 467 | 468 | ||
| 468 | 469 | for pg in self._partition_graphs: | |
| 469 | 470 | for node in pg.node: | |
| 470 | - if is_debug_node(node.name): | ||
| 471 | + if _is_debug_node(node.name): | ||
| 471 | 472 | # This is a debug node. Parse the node name and retrieve the | |
| 472 | 473 | # information about debug watches on tensors. But do not include | |
| 473 | 474 | # the node in the graph. | |
| 474 | 475 | (watched_node_name, watched_output_slot, _, | |
| 475 | - debug_op) = parse_debug_node_name(node.name) | ||
| 476 | + debug_op) = _parse_debug_node_name(node.name) | ||
| 476 | 477 | ||
| 477 | 478 | if watched_node_name not in self._debug_watches: | |
| 478 | 479 | self._debug_watches[ | |
@@ -507,7 +508,7 @@ def _load_partition_graphs(self, partition_graphs): | |||
| 507 | 508 | self._node_op_types[node.name] = node.op | |
| 508 | 509 | ||
| 509 | 510 | for inp in node.input: | |
| 510 | - if is_copy_node(inp) and node.op == "_Send": | ||
| 511 | + if _is_copy_node(inp) and node.op == "_Send": | ||
| 511 | 512 | copy_send_nodes.append(node.name) | |
| 512 | 513 | ||
| 513 | 514 | if inp.startswith("^"): | |
@@ -524,14 +525,14 @@ def _load_partition_graphs(self, partition_graphs): | |||
| 524 | 525 | if node in copy_send_nodes: | |
| 525 | 526 | continue | |
| 526 | 527 | ||
| 527 | - if is_copy_node(node): | ||
| 528 | + if _is_copy_node(node): | ||
| 528 | 529 | copy_nodes.append(node) | |
| 529 | 530 | ||
| 530 | 531 | inputs = self._node_inputs[node] | |
| 531 | 532 | ||
| 532 | 533 | for i in xrange(len(inputs)): | |
| 533 | 534 | inp = inputs[i] | |
| 534 | - if is_copy_node(inp): | ||
| 535 | + if _is_copy_node(inp): | ||
| 535 | 536 | # Find the input to the Copy node, which should be the original | |
| 536 | 537 | # input to the node. | |
| 537 | 538 | orig_inp = self._node_inputs[inp][0] | |
@@ -556,7 +557,7 @@ def _load_partition_graphs(self, partition_graphs): | |||
| 556 | 557 | ctrl_inputs = self._node_ctrl_inputs[node] | |
| 557 | 558 | debug_op_inputs = [] | |
| 558 | 559 | for ctrl_inp in ctrl_inputs: | |
| 559 | - if is_debug_node(ctrl_inp): | ||
| 560 | + if _is_debug_node(ctrl_inp): | ||
| 560 | 561 | debug_op_inputs.append(ctrl_inp) | |
| 561 | 562 | for debug_op_inp in debug_op_inputs: | |
| 562 | 563 | ctrl_inputs.remove(debug_op_inp) | |
@@ -922,7 +923,7 @@ def debug_watch_keys(self, node_name): | |||
| 922 | 923 | debug_ops = self._debug_watches[node_name][watched_slot] | |
| 923 | 924 | for debug_op in debug_ops: | |
| 924 | 925 | watch_keys.append( | |
| 925 | - get_tensor_watch_key(node_name, watched_slot, debug_op)) | ||
| 926 | + _get_tensor_watch_key(node_name, watched_slot, debug_op)) | ||
| 926 | 927 | ||
| 927 | 928 | return watch_keys | |
| 928 | 929 | ||
@@ -987,7 +988,7 @@ def get_tensor_file_paths(self, node_name, output_slot, debug_op): | |||
| 987 | 988 | ValueError: If the tensor does not exist in the debub dump data. | |
| 988 | 989 | """ | |
| 989 | 990 | ||
| 990 | - watch_key = get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 991 | + watch_key = _get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 991 | 992 | if watch_key not in self._watch_key_to_datum: | |
| 992 | 993 | raise ValueError("Watch key \"%s\" does not exist in the debug dump" % | |
| 993 | 994 | watch_key) | |
@@ -1012,7 +1013,7 @@ def get_tensors(self, node_name, output_slot, debug_op): | |||
| 1012 | 1013 | ValueError: If the tensor does not exist in the debub dump data. | |
| 1013 | 1014 | """ | |
| 1014 | 1015 | ||
| 1015 | - watch_key = get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 1016 | + watch_key = _get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 1016 | 1017 | if watch_key not in self._watch_key_to_datum: | |
| 1017 | 1018 | raise ValueError("Watch key \"%s\" does not exist in the debug dump" % | |
| 1018 | 1019 | watch_key) | |
@@ -1039,7 +1040,7 @@ def get_rel_timestamps(self, node_name, output_slot, debug_op): | |||
| 1039 | 1040 | ValueError: If the tensor does not exist in the debub dump data. | |
| 1040 | 1041 | """ | |
| 1041 | 1042 | ||
| 1042 | - watch_key = get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 1043 | + watch_key = _get_tensor_watch_key(node_name, output_slot, debug_op) | ||
| 1043 | 1044 | if watch_key not in self._watch_key_to_datum: | |
| 1044 | 1045 | raise ValueError("Watch key \"%s\" does not exist in the debug dump" % | |
| 1045 | 1046 | watch_key) | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -47,32 +47,32 @@ def testParseTensorName(self): | |||
| 47 | 47 | class NodeNameChecksTest(test_util.TensorFlowTestCase): | |
| 48 | 48 | ||
| 49 | 49 | def testIsCopyNode(self): | |
| 50 | - self.assertTrue(debug_data.is_copy_node("__copy_ns1/ns2/node3_0")) | ||
| 50 | + self.assertTrue(debug_data._is_copy_node("__copy_ns1/ns2/node3_0")) | ||
| 51 | 51 | ||
| 52 | - self.assertFalse(debug_data.is_copy_node("copy_ns1/ns2/node3_0")) | ||
| 53 | - self.assertFalse(debug_data.is_copy_node("_copy_ns1/ns2/node3_0")) | ||
| 54 | - self.assertFalse(debug_data.is_copy_node("_copyns1/ns2/node3_0")) | ||
| 55 | - self.assertFalse(debug_data.is_copy_node("__dbg_ns1/ns2/node3_0")) | ||
| 52 | + self.assertFalse(debug_data._is_copy_node("copy_ns1/ns2/node3_0")) | ||
| 53 | + self.assertFalse(debug_data._is_copy_node("_copy_ns1/ns2/node3_0")) | ||
| 54 | + self.assertFalse(debug_data._is_copy_node("_copyns1/ns2/node3_0")) | ||
| 55 | + self.assertFalse(debug_data._is_copy_node("__dbg_ns1/ns2/node3_0")) | ||
| 56 | 56 | ||
| 57 | 57 | def testIsDebugNode(self): | |
| 58 | 58 | self.assertTrue( | |
| 59 | - debug_data.is_debug_node("__dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 59 | + debug_data._is_debug_node("__dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 60 | 60 | ||
| 61 | 61 | self.assertFalse( | |
| 62 | - debug_data.is_debug_node("dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 62 | + debug_data._is_debug_node("dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 63 | 63 | self.assertFalse( | |
| 64 | - debug_data.is_debug_node("_dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 64 | + debug_data._is_debug_node("_dbg_ns1/ns2/node3:0_0_DebugIdentity")) | ||
| 65 | 65 | self.assertFalse( | |
| 66 | - debug_data.is_debug_node("_dbgns1/ns2/node3:0_0_DebugIdentity")) | ||
| 67 | - self.assertFalse(debug_data.is_debug_node("__copy_ns1/ns2/node3_0")) | ||
| 66 | + debug_data._is_debug_node("_dbgns1/ns2/node3:0_0_DebugIdentity")) | ||
| 67 | + self.assertFalse(debug_data._is_debug_node("__copy_ns1/ns2/node3_0")) | ||
| 68 | 68 | ||
| 69 | 69 | ||
| 70 | 70 | class ParseDebugNodeNameTest(test_util.TensorFlowTestCase): | |
| 71 | 71 | ||
| 72 | 72 | def testParseDebugNodeName_valid(self): | |
| 73 | 73 | debug_node_name_1 = "__dbg_ns_a/ns_b/node_c:1_0_DebugIdentity" | |
| 74 | 74 | (watched_node, watched_output_slot, debug_op_index, | |
| 75 | - debug_op) = debug_data.parse_debug_node_name(debug_node_name_1) | ||
| 75 | + debug_op) = debug_data._parse_debug_node_name(debug_node_name_1) | ||
| 76 | 76 | ||
| 77 | 77 | self.assertEqual("ns_a/ns_b/node_c", watched_node) | |
| 78 | 78 | self.assertEqual(1, watched_output_slot) | |
@@ -83,20 +83,20 @@ def testParseDebugNodeName_invalidPrefix(self): | |||
| 83 | 83 | invalid_debug_node_name_1 = "__copy_ns_a/ns_b/node_c:1_0_DebugIdentity" | |
| 84 | 84 | ||
| 85 | 85 | with self.assertRaisesRegexp(ValueError, "Invalid prefix"): | |
| 86 | - debug_data.parse_debug_node_name(invalid_debug_node_name_1) | ||
| 86 | + debug_data._parse_debug_node_name(invalid_debug_node_name_1) | ||
| 87 | 87 | ||
| 88 | 88 | def testParseDebugNodeName_missingDebugOpIndex(self): | |
| 89 | 89 | invalid_debug_node_name_1 = "__dbg_node1:0_DebugIdentity" | |
| 90 | 90 | ||
| 91 | 91 | with self.assertRaisesRegexp(ValueError, "Invalid debug node name"): | |
| 92 | - debug_data.parse_debug_node_name(invalid_debug_node_name_1) | ||
| 92 | + debug_data._parse_debug_node_name(invalid_debug_node_name_1) | ||
| 93 | 93 | ||
| 94 | 94 | def testParseDebugNodeName_invalidWatchedTensorName(self): | |
| 95 | 95 | invalid_debug_node_name_1 = "__dbg_node1_0_DebugIdentity" | |
| 96 | 96 | ||
| 97 | 97 | with self.assertRaisesRegexp(ValueError, | |
| 98 | 98 | "Invalid tensor name in debug node name"): | |
| 99 | - debug_data.parse_debug_node_name(invalid_debug_node_name_1) | ||
| 99 | + debug_data._parse_debug_node_name(invalid_debug_node_name_1) | ||
| 100 | 100 | ||
| 101 | 101 | ||
| 102 | 102 | class HasNanOrInfTest(test_util.TensorFlowTestCase): | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -50,8 +50,8 @@ wrapper: | |||
| 50 | 50 | ||
| 51 | 51 | ```python | |
| 52 | 52 | if FLAGS.debug: | |
| 53 | - sess = local_cli.LocalCLIDebugWrapperSession(sess) | ||
| 54 | - sess.add_tensor_filter("has_inf_or_nan", debug_data.has_inf_or_nan) | ||
| 53 | + sess = tf_debug.LocalCLIDebugWrapperSession(sess) | ||
| 54 | + sess.add_tensor_filter("has_inf_or_nan", tf_debug.has_inf_or_nan) | ||
| 55 | 55 | ``` | |
| 56 | 56 | ||
| 57 | 57 | This wrapper has the same interface as Session, so debugging requires no other | |
@@ -299,3 +299,8 @@ Frequently-asked questions: | |||
| 299 | 299 | model, check out | |
| 300 | 300 | [tfprof](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/contrib/tfprof) | |
| 301 | 301 | and other profiling tools for TensorFlow. | |
| 302 | + | ||
| 303 | + * **Q**: How do I link tfdbg against my Session in Bazel?<br /> | ||
| 304 | + **A**: In your BUILD rule, declare the dependency: `"//tensorflow:tensorflow_py"`. | ||
| 305 | + In your Python file, do: | ||
| 306 | + `from tensorflow.python import debug import tf_debug` | ||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -21,7 +21,7 @@ | |||
| 21 | 21 | from six.moves import xrange # pylint: disable=redefined-builtin | |
| 22 | 22 | import tensorflow as tf | |
| 23 | 23 | ||
| 24 | - from tensorflow.python.debug import local_cli | ||
| 24 | + from tensorflow.python import debug as tf_debug | ||
| 25 | 25 | ||
| 26 | 26 | flags = tf.app.flags | |
| 27 | 27 | FLAGS = flags.FLAGS | |
@@ -48,7 +48,7 @@ def main(_): | |||
| 48 | 48 | sess.run(tf.initialize_all_variables()) | |
| 49 | 49 | ||
| 50 | 50 | # Wrap the TensorFlow Session object for debugging. | |
| 51 | - sess = local_cli.LocalCLIDebugWrapperSession(sess) | ||
| 51 | + sess = tf_debug.LocalCLIDebugWrapperSession(sess) | ||
| 52 | 52 | ||
| 53 | 53 | sess.run(n1) | |
| 54 | 54 | ||
| Back | FazBrowse Home | New Git URL |
0 commit comments