国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

基于TensorBoard中graph模塊圖結構分析

2020-02-15 18:24:12
字體:
來源:轉載
供稿:網友

在上一篇文章中,我們介紹了如何使用源碼對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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 利辛县| 辉县市| 饶平县| 乳山市| 石阡县| 随州市| 平罗县| 当涂县| 城市| 厦门市| 张掖市| 鄂托克旗| 社旗县| 南雄市| 乌鲁木齐县| 鸡泽县| 西和县| 沐川县| 正镶白旗| 洪湖市| 子洲县| 中西区| 克山县| 陈巴尔虎旗| 临武县| 泰安市| 潼南县| 离岛区| 西乡县| 突泉县| 沈丘县| 黄龙县| 孝昌县| 闽清县| 西乌珠穆沁旗| 萝北县| 南平市| 辽中县| 夏津县| 克东县| 共和县|