新增训练过程生成曲线功能

This commit is contained in:
2025-11-04 20:17:59 +08:00
parent 27c589365e
commit b7ffbfc34a
6 changed files with 55 additions and 2 deletions

File diff suppressed because one or more lines are too long

View File

@@ -270,3 +270,9 @@ Epoch 260 | Train Loss: 0.0623 | Test Loss: 0.1268 | Loss Factor: 0.49:1
Epoch 270 | Train Loss: 0.0623 | Test Loss: 0.1269 | Loss Factor: 0.49:1 Epoch 270 | Train Loss: 0.0623 | Test Loss: 0.1269 | Loss Factor: 0.49:1
Epoch 280 | Train Loss: 0.0622 | Test Loss: 0.1271 | Loss Factor: 0.49:1 Epoch 280 | Train Loss: 0.0622 | Test Loss: 0.1271 | Loss Factor: 0.49:1
Epoch 290 | Train Loss: 0.0622 | Test Loss: 0.1271 | Loss Factor: 0.49:1 Epoch 290 | Train Loss: 0.0622 | Test Loss: 0.1271 | Loss Factor: 0.49:1
Epoch 0 | Train Loss: 0.2575 | Test Loss: 0.2492 | Loss Factor: 1.03:1
Epoch 10 | Train Loss: 0.1152 | Test Loss: 0.1740 | Loss Factor: 0.66:1
Epoch 20 | Train Loss: 0.0915 | Test Loss: 0.1562 | Loss Factor: 0.59:1
Epoch 0 | Train Loss: 0.3483 | Test Loss: 0.1410 | Loss Factor: 2.47:1
Epoch 10 | Train Loss: 0.1358 | Test Loss: 0.1807 | Loss Factor: 0.75:1
Epoch 20 | Train Loss: 0.1086 | Test Loss: 0.1600 | Loss Factor: 0.68:1

View File

@@ -14,7 +14,7 @@
"studyPercent": 0.001, "studyPercent": 0.001,
"stepCounts": 3, "stepCounts": 3,
"roundPrint": 10, "roundPrint": 10,
"round": 300, "round": 30,
"preDisposeData": true, "preDisposeData": true,
"disposeMethod": "minmax", "disposeMethod": "minmax",
"dataNoOrder": true "dataNoOrder": true

View File

@@ -38,6 +38,8 @@ import argparse
import sys import sys
import os import os
from FC_ML_Model.Model_Train_Curve_Data import TrainCurveData
# 获取当前脚本Data_Load.py所在的目录 # 获取当前脚本Data_Load.py所在的目录
current_script_dir = os.path.dirname(__file__) # 结果:/home/app/model/ModelTrainingPython/FC_ML_Baseline/FC_ML_Baseline_Data_Handler current_script_dir = os.path.dirname(__file__) # 结果:/home/app/model/ModelTrainingPython/FC_ML_Baseline/FC_ML_Baseline_Data_Handler
@@ -63,6 +65,8 @@ if __name__ == '__main__':
parser = argparse.ArgumentParser(description='代理模型训练参数输入') parser = argparse.ArgumentParser(description='代理模型训练参数输入')
parser.add_argument('--param', default='D:\liyong\project\ModelTrainingPython\FC_ML_Baseline\FC_ML_Baseline_Test\Train\param.json', parser.add_argument('--param', default='D:\liyong\project\ModelTrainingPython\FC_ML_Baseline\FC_ML_Baseline_Test\Train\param.json',
help='配置参数文件绝对路径') help='配置参数文件绝对路径')
parser.add_argument('--export', default='curve.json',
help='导出JSON文件名')
args = parser.parse_args() args = parser.parse_args()
params = parse_json_file(args.param) params = parse_json_file(args.param)
print(params) print(params)
@@ -123,6 +127,16 @@ if __name__ == '__main__':
# 在训练循环前初始化损失记录列表 # 在训练循环前初始化损失记录列表
train_losses = [] train_losses = []
test_losses = [] test_losses = []
train_curve_data = TrainCurveData()
train_curve_data.source_curve_data["legend"].append("Train Loss")
train_curve_data.source_curve_data["legend"].append("Test Loss")
serie_test = {}
serie_test["name"] = "Test Loss"
serie_test["data"] = []
serie_train = {}
serie_train["name"] = "Train Loss"
serie_train["data"] = []
for epoch in range(round_count): for epoch in range(round_count):
#模型启用训练模式 #模型启用训练模式
epoch_train_loss = 0 epoch_train_loss = 0
@@ -154,10 +168,18 @@ if __name__ == '__main__':
test_losses.append(avg_test_loss) test_losses.append(avg_test_loss)
#每100次迭代输出一次损失数值 #每100次迭代输出一次损失数值
if epoch % round_print == 0: if epoch % round_print == 0:
train_curve_data.source_curve_data["xAxis"].append(epoch)
serie_test["data"].append(avg_test_loss)
serie_train["data"].append(avg_train_loss)
train_curve_data.source_curve_data["series"].clear()
train_curve_data.source_curve_data["series"].append(serie_test)
train_curve_data.source_curve_data["series"].append(serie_train)
print( print(
f"Epoch {epoch} | Train Loss: {avg_train_loss:.4f} | Test Loss: {avg_test_loss:.4f} | Loss Factor: {avg_train_loss / avg_test_loss:.2f}:1") f"Epoch {epoch} | Train Loss: {avg_train_loss:.4f} | Test Loss: {avg_test_loss:.4f} | Loss Factor: {avg_train_loss / avg_test_loss:.2f}:1")
with open(source_dir + "training.log", "a") as f: with open(source_dir + "training.log", "a") as f:
f.write(f"Epoch {epoch} | Train Loss: {avg_train_loss:.4f} | Test Loss: {avg_test_loss:.4f} | Loss Factor: {avg_train_loss / avg_test_loss:.2f}:1\n") # 自动换行追加 f.write(f"Epoch {epoch} | Train Loss: {avg_train_loss:.4f} | Test Loss: {avg_test_loss:.4f} | Loss Factor: {avg_train_loss / avg_test_loss:.2f}:1\n") # 自动换行追加
with open(params["path"] + "/" + args.export, 'w') as f:
f.write(train_curve_data.to_json()) # 写
#导出训练后的模型 #导出训练后的模型
export_model(model,source_dir,"model",export_format,torch.randn(1, input_Size)) export_model(model,source_dir,"model",export_format,torch.randn(1, input_Size))

View File

@@ -0,0 +1,25 @@
import json
class TrainCurveData:
def __init__(self):
"""
初始化车辆数据类
参数与之前保持一致
"""
self.source_curve_data = {}
self.source_curve_data["legend"] = []
self.source_curve_data["xAxis"] = []
self.source_curve_data["series"] = []
def to_dict(self):
"""将类实例转换为字典格式"""
return {
'source_curve_data': self.source_curve_data
}
def to_json(self, indent=None):
"""将类实例序列化为JSON字符串"""
return json.dumps(self.to_dict(), indent=indent, ensure_ascii=False)
# 保留原有获取数据的方法
def get_curve_data(self): return self.source_curve_data