1. ホーム
  2. python

問題ログ1:matplotlibの関数を使用すると、エラー ValueError: max() arg is an empty sequence

2022-02-10 15:29:34

この記事は、私が学習過程で遭遇した問題、私の解決プロセスと学習経験を記録しています、もし間違いがあれば、修正を歓迎します

最近、Mojo pytorchのチュートリアルを勉強しているときに、エラーに遭遇しました。ValueError: max() arg is an empty sequence.
実行環境はpycharm 2018.3.5、pythonのバージョンは3.5、anacondaのインタプリタがロードされている状態です。具体的なコードは以下の通りです。

plt.ion() # Set up real-time printing
# plt.show()

optimizer = torch.optim.SGD(net.parameters(), lr = 0.5) # SGD optimizes the neural network
loss_func = torch.nn.MSELoss() # use mean squared deviation as loss function

for t in range(200): # train 200 steps
    prediction = net(x) # prediction for each step

    loss = loss_func(prediction, y) # Calling the loss function requires the predicted value to come first and the true value to come second, otherwise it will affect the results

    optimizer.zero_grad() # set all gradients to 0 first
    loss.backward() # pass the process in reverse, calculating the gradient of each node
    optimizer.step() # optimize the gradient with a learning efficiency of 0.5

    # Print every 5 steps
    if t % 5 == 0:
        # Print the data
        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)

Baiduの解決策に基づいてmax((),default=0)に変更してもまだうまくいかず、プロジェクトディレクトリ外のファイルを変更するとさらに問題が発生するので、この解決策は放棄してください。

最終的にpycharmの設定の問題だとわかり、メニューバーのFile-Setting-Tools-Python ScientificからShow plots in tool windowを削除したら解決しました。pycharmのツールウィンドウの画像表示が、画像の動的表示をサポートしていないことが原因だと思います(以前はplt.plot()を直接使ってもうまくいっていましたので)。