模型训练过程保存在.json文件中,读取.json绘制acc和loss变化曲线,方便观察模型随Iteration收敛情况的变化:
代码实现:
1、两个模型训练acc随Iteration的变化
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import json
data_path_1 = "./1.json"
data_path_2 = "./2.json"
def read_json(data_path, stage, key_1, key_2):
iter, acc_seg = [], []
with open(data_path, 'r') as f:
content = f.readlines()
for line in content:
if json.loads(line)["mode"] == stage:
iter.append(json.loads(line)[key_1])
acc_seg.append(json.loads(line)[key_2])
return iter, acc_seg
iter_1, acc_seg_1 = read_json(data_path_1, "train", "iter", "decode.acc_seg")
iter_2, acc_seg_2 = read_json(data_path_2, "train", "iter", "decode.seg.acc_seg")
max_value = max(acc_seg_1) if max(acc_seg_1) > max(acc_seg_2) else max(acc_seg_2)
print(max_value)
#设置横纵坐标的名称以及对应字体格式
font = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 10,
}
index = 0
# for i in range(len(acc_seg_2)):
# if acc_seg_2[i] >= 80:
# index = i
# break
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('iteration', font)
ax.set_ylabel('acc_seg', font)
ax.set_title('Seg Acc',size=10)
ax.plot(iter_1[index:], acc_seg_1[index:], label = "model_1")
ax.plot(iter_2[index:], acc_seg_2[index:], label = "model_2")
plt.legend(loc='upper right')
plt.show()
2、两个模型训练loss随Iteration的变化
import matplotlib.pyplot as plt
from matplotlib.pyplot import MultipleLocator
import json
data_path_1 = "./1.json"
data_path_2 = "./2.json"
def read_json(data_path, stage, key_1, key_2):
iter, acc_seg = [], []
with open(data_path, 'r') as f:
content = f.readlines()
for line in content:
if json.loads(line)["mode"] == stage:
iter.append(json.loads(line)[key_1])
acc_seg.append(json.loads(line)[key_2])
return iter, acc_seg
iter_1, loss_seg_1 = read_json(data_path_1, "train", "iter", "decode.loss_seg")
iter_2, loss_seg_2 = read_json(data_path_2, "train", "iter", "decode.seg.loss_seg")
max_value = max(loss_seg_1) if max(loss_seg_1) > max(loss_seg_2) else max(loss_seg_2)
print(max_value)
#设置横纵坐标的名称以及对应字体格式
font = {'family' : 'Times New Roman',
'weight' : 'normal',
'size' : 10,
}
index = 0
# for i in range(len(loss_seg_2)):
# if loss_seg_2[i] <= 0.25:
# index = i
# break
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.set_xlabel('iteration', font)
ax.set_ylabel('loss_seg', font)
ax.set_title('Seg Loss',size=10)
# y_major_locator=MultipleLocator(0.01)
# ax.yaxis.set_major_locator(y_major_locator)
ax.plot(iter_1[index:], loss_seg_1[index:], label = "model_1")
ax.plot(iter_2[index:], loss_seg_2[index:], label = "model_2")
plt.legend(loc='upper right')
plt.show()