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

本文链接:https://blog.csdn.net/weixin_42214565/article/details/100113735

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

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

[plain] view plaincopy

  1. plt.ion()   # 设置实时打印  
  2. # plt.show()  
  3.   
  4. optimizer = torch.optim.SGD(net.parameters(), lr = 0.5)     # SGD优化神经网络  
  5. loss_func = torch.nn.MSELoss()  # 用均方差做损失函数  
  6.   
  7. for t in range(200):    # 训练200步  
  8. prediction = net(x) # 每一步的预测  
  9.   
  10. loss = loss_func(prediction, y) # 调用损失函数需要预测值在前,真实值在后,否则会影响结果  
  11.   
  12. optimizer.zero_grad()    # 先将所有梯度设为0  
  13. loss.backward()     # 反向传递过程,计算出每个节点的梯度  
  14. optimizer.step()    # 以学习效率为0.5的参数优化梯度  
  15.   
  16. # 每5步打印一次  
  17. if t % 5 == 0:  
  18. # 打印数据  
  19. plt.cla()  
  20. plt.scatter(x.data.numpy(), y.data.numpy())  
  21. plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw = 5)  
  22. plt.text(0.5, 0, 'Loss=%.4f' % loss.data.numpy(), fontdict={'size': 20, 'color':  'red'})  
  23. plt.pause(0.1)  
  24. plt.ioff()  
  25. plt.show()  

完整的报错内容是:

[plain] view plaincopy

  1. Traceback (most recent call last):  
  2. File "D:/My_Projects/pytorch_Learning/activation_function_Learning.py", line 47, in   
  3. plt.cla()  
  4. File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 3546, in cla  
  5. ret = gca().cla()  
  6. File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 936, in gca  
  7. return gcf().gca(**kwargs)  
  8. File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 586, in gcf  
  9. return figure()  
  10. File "D:\Anaconda3\lib\site-packages\matplotlib\pyplot.py", line 557, in figure  
  11. draw_if_interactive()  
  12. File "D:\PyCharm 2018.3.5\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 39, in draw_if_interactive  
  13. figManager.canvas.show()  
  14. File "D:\PyCharm 2018.3.5\helpers\pycharm_matplotlib_backend\backend_interagg.py", line 62, in show  
  15. self.figure.tight_layout()  
  16. File "D:\Anaconda3\lib\site-packages\matplotlib\figure.py", line 1752, in tight_layout  
  17. rect=rect)  
  18. File "D:\Anaconda3\lib\site-packages\matplotlib\tight_layout.py", line 322, in get_tight_layout_figure  
  19. max_nrows = max(nrows_list)  
  20. ValueError: max() arg is an empty sequence  

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

[plain] view plaincopy

  1. max_nrows = max(nrows_list)  
  2. ncols = max(ncols_list)  

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

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

你可能感兴趣的:(tensorflow,深度学习,Python)