在上一篇文章中,我們介紹了如何使用源碼對TensorBoard進行編譯教程,沒有定制需求的可以直接使用pip進行安裝。
TensorBoard中的graph是一種計算圖,里面的點用于表示Tensor本身或者運算符,圖中的邊則代表Tensor的流動或者控制關系。
本文主要從代碼的層面,分析graph的數據來源與結構。
一般來說,我們在啟動TensorBoard的時候會使用--logdir參數配置文件路徑(或者設置數據庫位置),這些日志文件為TensorBoard提供了數據。于是我們打開一個日志文件,查看里面的內容
我們看到,文件是通過二進制展示的,因此無法直接讀取文件的內容。
回到瀏覽器中,進入graph頁面,通過開發者工具發現,構造圖的時候調用了一個接口
http://localhost:6006/data/plugin/graphs/graph?large_attrs_key=_too_large_attrs&limit_attr_size=1024&run=task1
用瀏覽器打開這個地址,看到以下內容
node { name: "Input/X" op: "Placeholder" attr { key: "_output_shapes" value { list { shape { unknown_rank: true } } } } attr { key: "dtype" value { type: DT_FLOAT } } attr { key: "shape" value { shape { unknown_rank: true } } }}...
每個node都能夠與圖中的一個節點相對應,因此我們可以確定,這個接口里返回的node,就是構成圖所需要的數據結構。
那么,TensorBoard是如何將日志文件轉化為圖的呢?
TesnorBoard中的每個模塊都是以plugin存在的,我們進入tensorboard/plugin/graph/graphs_plungin.py,在這個文件中定義了graph相關的接口
def get_plugin_apps(self): return { '/graph': self.graph_route, '/runs': self.runs_route, '/run_metadata': self.run_metadata_route, '/run_metadata_tags': self.run_metadata_tags_route, }
我們可以看到,‘/graph'這個接口返回值為self.graph_route,在這個文件中搜索graph_route方法
@wrappers.Request.application def graph_route(self, request): """Given a single run, return the graph definition in protobuf format.""" run = request.args.get('run') if run is None: return http_util.Respond( request, 'query parameter "run" is required', 'text/plain', 400) limit_attr_size = request.args.get('limit_attr_size', None) if limit_attr_size is not None: try: limit_attr_size = int(limit_attr_size) except ValueError: return http_util.Respond( request, 'query parameter `limit_attr_size` must be an integer', 'text/plain', 400) large_attrs_key = request.args.get('large_attrs_key', None) try: result = self.graph_impl(run, limit_attr_size, large_attrs_key) except ValueError as e: return http_util.Respond(request, e.message, 'text/plain', code=400) else: if result is not None: (body, mime_type) = result # pylint: disable=unpacking-non-sequence return http_util.Respond(request, body, mime_type) else: return http_util.Respond(request, '404 Not Found', 'text/plain', code=404)
新聞熱點
疑難解答