新增训练过程生成曲线功能
This commit is contained in:
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|
||||||
|
|||||||
25
FC_ML_Model/Model_Train_Curve_Data.py
Normal file
25
FC_ML_Model/Model_Train_Curve_Data.py
Normal 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
|
||||||
Reference in New Issue
Block a user