Python 3.x plot函数不打印仅在PyCharm中绘制图例的曲线
我正在做一些关于使用PyTorch进行图像分类的家庭作业。为此,我访问了以下链接:并获得了一些与培训损失和验证损失相关的结果Python 3.x plot函数不打印仅在PyCharm中绘制图例的曲线,python-3.x,matplotlib,deep-learning,pycharm,pytorch,Python 3.x,Matplotlib,Deep Learning,Pycharm,Pytorch,我正在做一些关于使用PyTorch进行图像分类的家庭作业。为此,我访问了以下链接:并获得了一些与培训损失和验证损失相关的结果 [ 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 decrease
[ 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 ...
但问题是,每当我试图绘制损失曲线时,它并没有显示任何东西
我希望我的曲线是这样的。
下面是我用来绘制这条曲线的代码:
# 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]
由于len(train_loss)==1
和train_loss=[1.60599992909431458]
,您的绘图与调用plt.plot(范围(1,2),[1.6059992909431458])
时完全相同,您可以检查,它是空的(这是因为plt.plot
在数据点之间绘制线条,并且由于存在单个数据点,因此无法绘制线条)。您可以将plt.plot
更改为plt.scatter
,以查看单个数据点
因此,这个问题实际上与绘图无关,您应该找出为什么您的算法只运行一个历元并对此进行故障排除,而不是绘图。由于len(train\u loss)==1
和train\u loss=[1.6059992909431458]
,您的绘图与调用plt.plot时完全相同(范围(1,2),[1.6059992909431458])
,您可以检查,它是空的(这是因为plt.plot
在数据点之间绘制直线,并且由于存在单个数据点,因此不能绘制直线)。您可以将plt.plot
更改为plt.scatter
,以查看单个数据点
因此,这个问题实际上与绘图无关,您应该找出为什么您的算法只运行一个历元并对此进行故障排除,而不是绘图。您可以打印(并在此处发布)到
绘图函数的输入吗?即范围(1,len(train\u loss)+1)
和火车损失
?@Jatentaki,我已经更新了我的帖子。请看一看!你已经更新了帖子,但没有使用我要求的信息。我要求你打印
传递给plt.plot
的确切值,以及它们的计算方法(可能) irrelevant@Jatentaki,很抱歉之前的更新不正确。这是我的结果,您在列车丢失镜头前询问:1列车丢失:[1.6059992909431458]。您能打印(并在此处发布)到绘图功能的输入吗?即范围(1,镜头(列车丢失)+1)
和火车损失
?@Jatentaki,我已经更新了我的帖子。请看一看!你已经更新了帖子,但没有使用我要求的信息。我要求你打印
传递给plt.plot
的确切值,以及它们的计算方法(可能) irrelevant@Jatentaki,很抱歉之前的更新不正确。这是我的结果,您在列车丢失之前询问:1列车丢失:[1.6059992909431458]。