plt.clf() # 清除当前图像 plt.plot(income_list,label='income') plt.plot(loss_list,label='loss') plt.pause(0.1)如何分为两个图表显示
时间: 2024-10-13 15:15:34 浏览: 59
`plt.clf()` 函数用于清除当前图形窗口的内容,如果想要将 `income_list` 和 `loss_list` 分别绘制到两个独立的图表上,你需要按照以下步骤操作:
1. 首先,创建一个新的 Figure 对象来代表新的画布:
```python
fig1 = plt.figure() # 创建第一个图表
```
2. 然后,在这个新图上绘制收入数据:
```python
ax1 = fig1.add_subplot() # 添加子图
ax1.plot(income_list, label='income')
```
3. 对于损失数据,同样创建一个新的 Figure 或者子图:
```python
fig2 = plt.figure() # 或者 fig2 = plt.figure()
ax2 = fig2.add_subplot()
ax2.plot(loss_list, label='loss')
```
4. 最后暂停一会儿让每个图可视化:
```python
plt.pause(0.1)
```
5. 如果你希望这两个图在同一窗口显示,可以使用 `subplots_adjust` 调整它们的位置:
```python
fig2.subplots_adjust(right=1.5) # 将 loss 图放在右边
```
记得在每次交互式绘图后调用 `plt.show()` 来显示所有的图,这里为了简洁没有列出。
相关问题
def train_loop(): step = 0 ax = [] ay = [] plt.ion() PASS_NUM = n_epochs for pass_id in range(PASS_NUM): total_loss_pass = 0 for data in train_reader(): avg_loss_value, = exe.run( fluid.default_main_program(), feed= feeder.feed(data), fetch_list=[avg_loss]) total_loss_pass += avg_loss_value ax.append(pass_id) ay.append(total_loss_pass) plt.clf() plt.plot(ax, ay) plt.pause(0.01) plt.ioff() step += 1 display.clear_output(wait=True) fluid.io.save_inference_model(SAVE_DIRNAME, ['x'], [prediction], exe) train_loop()
这段代码是一个使用 PaddlePaddle 框架进行训练的循环。具体来说,它包含以下步骤:
1. 定义了一个名为 `train_loop` 的函数,表示训练循环。
2. 初始化一些变量,包括 `step` 记录当前训练步数,`ax` 和 `ay` 用于绘制训练过程中的损失曲线,`plt.ion()` 用于打开 pyplot 的交互模式。
3. 循环执行 `PASS_NUM` 次训练,其中 `PASS_NUM` 是训练轮数。在每一轮训练中,遍历训练数据集 `train_reader()` 中的每个样本,计算平均损失值 `avg_loss_value`,并累加到 `total_loss_pass` 中。
4. 将当前轮数 `pass_id` 和累加的平均损失值 `total_loss_pass` 分别添加到 `ax` 和 `ay` 中,用于绘制损失曲线。
5. 使用 `plt.clf()` 清空之前的图像,再使用 `plt.plot(ax, ay)` 绘制当前的损失曲线,使用 `plt.pause(0.01)` 暂停一段时间,使图像得以显示。
6. 使用 `plt.ioff()` 关闭交互模式,`step` 加 1,使用 `display.clear_output(wait=True)` 清空输出界面,进入下一轮训练。
7. 训练结束后,使用 `fluid.io.save_inference_model()` 将训练好的模型保存到指定路径 `SAVE_DIRNAME` 中。
depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') plt.show()
这段代码是用于通过决策树深度来观察决策树的过拟合情况。代码首先定义了一个范围为1到15的深度列表depth,然后创建了两个空列表err_train_list和err_test_list,用于存储训练集和测试集的错误率。接下来,使用决策树分类器DecisionTreeClassifier,并设置criterion为'entropy',创建了一个决策树模型clf。然后,使用for循环遍历深度列表depth,每次将当前深度d设置为clf的最大深度,并使用x_train和y_train进行拟合。然后,分别对训练集和测试集进行预测,并计算错误率,将错误率添加到对应的列表中。最后,使用matplotlib库绘制了深度与错误率的图形,并显示出来。
这段代码可以帮助我们观察决策树在不同深度下的过拟合情况,通过观察错误率的变化,可以选择一个合适的深度来构建决策树模型。
阅读全文