欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DEBUG小记1:使用matplotlib的函数时报错ValueError: max() arg is an empty sequence

程序员文章站 2024-02-12 13:31:40
...

本文记录学习过程中遇到的问题、我的解决过程以及学习心得,如有错误之处,欢迎指正!

最近在学习莫烦pytorch教程时遇到错误:ValueError: max() arg is an empty sequence。
运行环境是pycharm2018.3.5,python版本是3.5,加载了anaconda的解释器。具体代码如下:

plt.ion()   # 设置实时打印
# plt.show()

optimizer = torch.optim.SGD(net.parameters(), lr = 0.5)     # SGD优化神经网络
loss_func = torch.nn.MSELoss()  # 用均方差做损失函数

for t in range(200):    # 训练200步
    prediction = net(x) # 每一步的预测

    loss = loss_func(prediction, y) # 调用损失函数需要预测值在前,真实值在后,否则会影响结果

    optimizer.zero_grad()    # 先将所有梯度设为0
    loss.backward()     # 反向传递过程,计算出每个节点的梯度
    optimizer.step()    # 以学习效率为0.5的参数优化梯度

    # 每5步打印一次
    if t % 5 == 0:
        # 打印数据
        plt.cla()
        plt.scatter(x.data.numpy(), y.data.numpy())
        plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw = 5)
        plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color':  'red'})
        plt.pause(0.1)
plt.ioff()
plt.show()

完整的报错内容是:

Traceback (most recent call last):
  File "D:/My_Projects/pytorch_Learning/activation_function_Learning.py", line 47, in <module>
    plt.cla()
  File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 3546, in cla
    ret = gca().cla()
  File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 936, in gca
    return gcf().gca(**kwargs)
  File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 586, in gcf
    return figure()
  File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 557, in figure
    draw_if_interactive()
  File "D:\PyCharm 2018.3.5\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 39, in draw_if_interactive
    figManager.canvas.show()
  File "D:\PyCharm 2018.3.5\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 62, in show
    self.figure.tight_layout()
  File "D:\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1752, in tight_layout
    rect=rect)
  File "D:\Anaconda3\lib\site-packages\matplotlib\tight_layout.py", line 322, in get_tight_layout_figure
    max_nrows = max(nrows_list)
ValueError: max() arg is an empty sequence

跑了一下教程给的代码仍然有这个问题,根据索引找到了anaconda里的文件tight_layout.py中的出错地方

    max_nrows = max(nrows_list)
    max_ncols = max(ncols_list)

根据百度到的解决方案改成max((),default=0)仍然不能解决,并且修改项目目录之外的文件会引发更多的问题,所以放弃这个办法。

最后发现是pycharm设置的问题,在菜单栏File-Setting-Tools-Python Scientific中去除勾选Show plots in tool window即可解决问题。具体原因我猜想是pycharm的tool window里的图像显示不支持动态显示图像(因为之前直接使用plt.plot()都是正常的)

相关标签: python