例如目前我有6个模型的loss和val loss, 我需要用代码集成并画出两张具有多模型的loss曲线和val loss曲线,我能提供6个模型的loss.txt和val loss.txt,总共12个txt文件我都存在这个位置
“C:xxxxxxxxxxxxxx” 我的6个模型 12个文件夹名字分别是Faster R-CNN loss.txt Faster R-CNN val loss.txt SSD loss.txt SSD val loss.txt YOLOv4 loss.txt YOLOv4 val loss.txt YOLOv4-tiny loss.txt YOLOv4-tiny val loss.txt yolov5s v6.0 loss.txt yolov5s v6.0 val loss.txt YOLOv5-LCBM loss.txt YOLOv5-LCBM val loss.txt 所以实际上Training Loss只需要六个曲线同样的Validation Loss也只需要六个曲线。
可以使用Python中的matplotlib库来画出这些曲线。首先,你需要将这些文本文件中的数据加载到程序中,然后使用matplotlib来绘制曲线。以下是一个简单的Python脚本,假设你的文件夹结构如下所示:
C:\Users\luo\Desktop\model loss
├── Faster R-CNN loss.txt
├── Faster R-CNN val loss.txt
├── SSD loss.txt
├── SSD val loss.txt
├── YOLOv4 loss.txt
├── YOLOv4 val loss.txt
├── YOLOv4-tiny loss.txt
├── YOLOv4-tiny val loss.txt
├── yolov5s v6.0 loss.txt
├── yolov5s v6.0 val loss.txt
├── YOLOv5-LCBM loss.txt
└── YOLOv5-LCBM val loss.txt
使用下面的脚本:
import os
import matplotlib.pyplot as pltdef plot_loss(file_paths, model_names, save_path):
plt.figure(figsize=(10, 6))
for file_path, model_name in zip(file_paths, model_names):
with open(file_path, 'r') as file:
lines = file.readlines()
epochs = list(range(1, len(lines)+1))
loss_values = [float(line.strip()) for line in lines]
plt.plot(epochs, loss_values, label=model_name)plt.title('Training Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.savefig(os.path.join(save_path, 'training_loss.png'))
plt.show()def plot_val_loss(file_paths, model_names, save_path):
plt.figure(figsize=(10, 6))
for file_path, model_name in zip(file_paths, model_names):
with open(file_path, 'r') as file:
lines = file.readlines()
epochs = list(range(1, len(lines)+1))
loss_values = [float(line.strip()) for line in lines]
plt.plot(epochs, loss_values, label=model_name)plt.title('Validation Loss')
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.legend()
plt.savefig(os.path.join(save_path, 'validation_loss.png'))
plt.show()if __name__ == '__main__':
folder_path = r'C:\xxxxxxxxxxxxx'(更改自己的文件地址)
training_loss_files = [
'Faster R-CNN loss.txt',
'SSD loss.txt',
'YOLOv4 loss.txt',
'YOLOv4-tiny loss.txt',
'yolov5s v6.0 loss.txt',
'YOLOv5-LCBM loss.txt',
]val_loss_files = [
'Faster R-CNN val loss.txt',
'SSD val loss.txt',
'YOLOv4 val loss.txt',
'YOLOv4-tiny val loss.txt',
'yolov5s v6.0 val loss.txt',
'YOLOv5-LCBM val loss.txt',
]training_loss_paths = [os.path.join(folder_path, file) for file in training_loss_files]
val_loss_paths = [os.path.join(folder_path, file) for file in val_loss_files]model_names = [
'Faster R-CNN',
'SSD',
'YOLOv4',
'YOLOv4-tiny',
'yolov5s v6.0',
'YOLOv5-LCBM',
]plot_loss(training_loss_paths, model_names, folder_path)
plot_val_loss(val_loss_paths, model_names, folder_path)
虽然说这样子操作麻烦一些但能生成出你想要的多模型比对图!!!谢谢!!,好用的话点个赞!