首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于add_scalar()的TensorboardX输入问题

关于add_scalar()的TensorboardX输入问题
EN

Stack Overflow用户
提问于 2020-06-26 21:38:58
回答 1查看 746关注 0票数 2

当我使用tensorboardX绘制我的数据丢失情况时,它向我显示:

代码语言:javascript
复制
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()函数必须输入标量数据,我这样做了,但它显示了一个错误。谢谢你的帮忙!

EN

回答 1

Stack Overflow用户

发布于 2021-04-07 16:27:49

我也有同样的问题,这里有一个最小的样本来重现你的错误,

代码语言:javascript
复制
writer = SummaryWriter(osp.join('runs', 'hello'))
loss = np.random.randn(10)
writer.add_scalar(tag='Checking range', scalar_value=loss)
writer.close()

这会返回

代码语言:javascript
复制
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

代码语言:javascript
复制
print(loss.squeeze().ndim)

下面的输出

代码语言:javascript
复制
1

因此,我们找到了错误的原因,在squeeze操作之后,add_scalar需要0-d标量,我们给它一个1-d标量。PyTorch文档的Tensorboard页面包含add_scalar示例。让我们将我们的代码转换为该版本。

代码语言:javascript
复制
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()

这是输出,

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62596016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档