tensorboard 版本2.3
tensorboard是一个强大的可视化工具,通常是绘制训练过程的曲线,
因此tensorflow.summary.scalar在绘制曲线 只接受step为整数的情况。
但是,如果我们想绘制一个普通的二维曲线, 并不想绘制训练过程的曲线,例如CDF曲线,那么我们需要横坐标也是小数
但是官方的tensorflow代码是不支持的,因此我们需要修改源码
这里介绍一个绘制方法:
第一步.
使用tensorflow.summary.scalar 绘制曲线,在将step(例如step=0.5)传入方法之前,现将step扩大100000倍(倍数可根据精度要求自取),
这样绘制出的曲线在tensorboard观察,会发现横坐标是很大的整数50000
第二步.
1.找到tensorboard的库文件夹,例如:
cd ~/lib/python3.6/site-packages/tensorboard/
2.打开backend/event_processing/plugin_event_accumulator.py:
vi backend/event_processing/plugin_event_accumulator.py
3.搜索 _ProcessTensor 的定义, 如下:
def _ProcessTensor(self, tag, wall_time, step, tensor):
tv = TensorEvent(wall_time=wall_time, step=step, tensor_proto=tensor)
with self._tensors_by_tag_lock:
if tag not in self.tensors_by_tag:
reservoir_size = self._GetTensorReservoirSize(tag)
self.tensors_by_tag[tag] = reservoir.Reservoir(reservoir_size)
self.tensors_by_tag[tag].AddItem(_TENSOR_RESERVOIR_KEY, tv)
4.在以上代码中将step修改为自己想要的值:
例如step = step / 100000.0, 如下:
def _ProcessTensor(self, tag, wall_time, step, tensor):
step = step / 100000.0
tv = TensorEvent(wall_time=wall_time, step=step, tensor_proto=tensor)
with self._tensors_by_tag_lock:
if tag not in self.tensors_by_tag:
reservoir_size = self._GetTensorReservoirSize(tag)
self.tensors_by_tag[tag] = reservoir.Reservoir(reservoir_size)
self.tensors_by_tag[tag].AddItem(_TENSOR_RESERVOIR_KEY, tv)
5.重新启动tensorboard, 在浏览器查看时可看到step数据会改变,变成可以用小数表示的了,当step小于1时,会把0.5表示成 500m ,其中m表示0.001, 因此500m = 0.5
**注意 如果要使程序更鲁棒,需要添加更复杂的代码,现在主要是想指出,要想显示小数表示的step可以在这段代码中修改step的数值, 因此没有做复杂的更改

本文介绍了如何在Tensorboard 2.3中使用小数表示scalar曲线的step。由于默认情况下tensorflow.summary.scalar仅接受整数step,为了绘制非训练过程的曲线,如CDF曲线,可以通过在绘制前将step乘以放大系数,然后在Tensorboard的源码`plugin_event_accumulator.py`中修改step的值。通过这种方法,可以在重新启动Tensorboard后,看到step以小数形式展示,如0.5显示为500m。

372

被折叠的 条评论
为什么被折叠?



