国产探花免费观看_亚洲丰满少妇自慰呻吟_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)            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 安塞县| 孟村| 汉源县| 西充县| 贡嘎县| 中宁县| 余庆县| 呼和浩特市| 英德市| 久治县| 晋城| 勐海县| 富裕县| 城口县| 玛纳斯县| 石首市| 夏河县| 锡林郭勒盟| 淳安县| 新昌县| 运城市| 卢氏县| 儋州市| 武冈市| 陆川县| 梓潼县| 康平县| 黑水县| 迁安市| 长宁县| 阿鲁科尔沁旗| 运城市| 武隆县| 饶河县| 于都县| 昌宁县| 峨眉山市| 内江市| 定远县| 舒兰市| 堆龙德庆县|