【问题标题】:TensorboardX input problem about add_scalar()关于 add_scalar() 的 TensorboardX 输入问题
【发布时间】:2020-06-26 13:38:57
【问题描述】:

当我使用 tensorboardX 绘制数据丢失图时,它告诉我:

AssertionError                            Traceback (most recent call last)
<ipython-input-76-73419a51fcc9> in <module>
----> 1 writer.add_scalar('resnet34_loss', loss)

F:\Program Files\Python\lib\site-packages\tensorboardX\writer.py in add_scalar(self, tag, scalar_value, global_step, walltime)
    403             scalar_value = workspace.FetchBlob(scalar_value)
    404         self._get_file_writer().add_summary(
--> 405             scalar(tag, scalar_value), global_step, walltime)
    406 
    407     def add_scalars(self, main_tag, tag_scalar_dict, global_step=None, walltime=None):

F:\Program Files\Python\lib\site-packages\tensorboardX\summary.py in scalar(name, scalar, collections)
    145     name = _clean_tag(name)
    146     scalar = make_np(scalar)
--> 147     assert(scalar.squeeze().ndim == 0), 'scalar should be 0D'
    148     scalar = float(scalar)
    149     return Summary(value=[Summary.Value(tag=name, simple_value=scalar)])

AssertionError: scalar should be 0D

我已经将损失从float 变成np.array,并且我已经阅读了tensorboardX 的文档,它告诉我add_scalar() 函数必须输入标量数据,我这样做了,但它向我显示了一个错误.感谢您的帮助!

【问题讨论】:

    标签: python pytorch tensorboardx


    【解决方案1】:

    我遇到了同样的问题,这里是重现您的错误的最小示例,

    writer = SummaryWriter(osp.join('runs', 'hello'))
    loss = np.random.randn(10)
    writer.add_scalar(tag='Checking range', scalar_value=loss)
    writer.close()
    

    返回,

    Traceback (most recent call last):
    
      File "untitled0.py", line 26, in <module>
        writer.add_scalar(tag='Checking range', scalar_value=loss)
    
      File "/home/melike/anaconda2/envs/pooling/lib/python3.6/site-packages/torch/utils/tensorboard/writer.py", line 346, in add_scalar
        scalar(tag, scalar_value), global_step, walltime)
    
      File "/home/melike/anaconda2/envs/pooling/lib/python3.6/site-packages/torch/utils/tensorboard/summary.py", line 248, in scalar
        assert(scalar.squeeze().ndim == 0), 'scalar should be 0D'
    
    AssertionError: scalar should be 0D
    

    如断言错误所示,scalar.squeeze().ndim 应该有 0 维。让我们检查一下我们的scalar_value,它是loss

    print(loss.squeeze().ndim)
    

    这个输出

    1
    

    所以,我们找到了错误的原因,add_scalarsqueeze 操作之后期望 0-d 标量,我们给它一个 1-d 标量。 PyTorch 文档的Tensorboard 页面有add_scalar 示例。让我们将代码转换为那个版本。

    writer = SummaryWriter(osp.join('runs', 'hello'))
    loss = np.random.randn(10)
    for i, val in enumerate(loss):
        writer.add_scalar(tag='Checking range', scalar_value=val, global_step=i)
    writer.close()
    

    这是输出,

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-05
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-05
      • 2011-04-15
      相关资源
      最近更新 更多