【问题标题】:plot function does not plot curves just plotted legend in PyCharmplot 函数不绘制曲线,只是在 PyCharm 中绘制图例
【发布时间】:2020-01-02 13:14:53
【问题描述】:

我正在做一些关于使用 PyTorch 进行图像分类的作业。为此,我访问了以下链接:https://github.com/Bjarten/early-stopping-pytorch/blob/master/MNIST_Early_Stopping_example.ipynb 并获得了一些与训练损失和验证损失相关的结果

[ 1/10] train_loss: 1.56952 valid_loss: 1.54557
Validation loss decreased (inf --> 1.545571).  Saving model ...
[ 2/10] train_loss: 1.52198 valid_loss: 1.50932
Validation loss decreased (1.545571 --> 1.509324).  Saving model ...
[ 3/10] train_loss: 1.48958 valid_loss: 1.48514
Validation loss decreased (1.509324 --> 1.485136).  Saving model ...
[ 4/10] train_loss: 1.46960 valid_loss: 1.46938
Validation loss decreased (1.485136 --> 1.469381).  Saving model ...

但问题是,每当我尝试绘制损失曲线时,它都不会显示任何内容。

my plotted figure

我希望我的曲线像the one in this picture。 这是我用来绘制这条曲线的代码:

  # visualize the loss as the network trained
    fig = plt.figure(figsize=(10, 8))
    plt.plot(range(1, len(train_loss) + 1), train_loss, label='Training Loss')
    plt.plot(range(1, len(valid_loss) + 1), valid_loss, label='Validation Loss')

        # find position of lowest validation loss
    minposs = valid_loss.index(min(valid_loss)) + 1
    plt.axvline(minposs, linestyle='--', color='r', label='Early Stopping Checkpoint')

    plt.xlabel('epochs')
    plt.ylabel('loss')
    plt.ylim(0, 0.5)  # consistent scale
    plt.xlim(0, len(train_loss) + 1)  # consistent scale
    plt.grid(True)
    plt.legend()
    plt.tight_layout()
    plt.show()
    fig.savefig('loss_plot.png', bbox_inches='tight')

这里是训练损失和测试损失的长度值

len of train loss: 1
train loss :[1.6059992909431458]

【问题讨论】:

  • 您可以打印(并在此处发布)您的plot 函数的输入吗?那是range(1, len(train_loss) + 1)train_loss?
  • @Jatentaki,我已经更新了我的帖子。请看一下!
  • 您已更新您的帖子,但未包含我要求的信息。我问你 print 你传递给 plt.plot 的确切值以及它们的计算方式(可能)无关
  • @Jatentaki,抱歉之前的更新不正确。这是我在火车损失 len 之前询问的结果:1 火车损失:[1.6059992909431458]。

标签: python-3.x matplotlib deep-learning pycharm pytorch


【解决方案1】:

由于len(train_loss) == 1train_loss = [1.6059992909431458],您的绘图与调用plt.plot(range(1, 2), [1.6059992909431458]) 完全相同,正如您可以检查的那样,它是空的(这是因为plt.plot 在数据点之间绘制线,并且作为有一个数据点,不能画线)。您可以将 plt.plot 更改为 plt.scatter 以查看该单个数据点。

所以这个问题实际上与绘图无关,你应该弄清楚为什么你的算法只运行一个时期并排除故障,而不是绘图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    相关资源
    最近更新 更多