| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- # main.py
- import os
- import torch
- import numpy as np
- import random
- from gat_lstm import GAT_LSTM
- from data_trainer import Trainer
- from args import lstm_args_parser
- from torch.nn import MSELoss
- from data_preprocessor import DataPreprocessor
- def set_seed(seed):
- random.seed(seed)
- os.environ['PYTHONHASHSEED'] = str(seed)
- np.random.seed(seed)
- torch.manual_seed(seed)
- torch.cuda.manual_seed(seed)
- torch.cuda.manual_seed_all(seed)
- torch.backends.cudnn.deterministic = True
- torch.backends.cudnn.benchmark = False
- def main():
- args = lstm_args_parser()
- set_seed(args.random_seed)
-
- device = torch.device(f"cuda:{args.device}" if torch.cuda.is_available() else "cpu")
- args.device = device # 将device存入args,方便后续使用
- # 数据预处理
- data = DataPreprocessor.read_and_combine_csv_files(args)
- train_loader, val_loader, test_loader, _ = DataPreprocessor.load_and_process_data(args, data)
-
- # 初始化包含16个子模型的整体模型
- model = GAT_LSTM(args).to(device)
- # 初始化训练器和MSE损失函数
- trainer = Trainer(model, args, data)
- criterion = MSELoss()
- # 优化器:优化所有子模型的参数(联合训练)
- optimizer = torch.optim.Adam(
- model.parameters(), # 整体模型参数
- lr=args.lr
- )
- scheduler = torch.optim.lr_scheduler.StepLR(
- optimizer,
- step_size=args.scheduler_step_size,
- gamma=args.scheduler_gamma
- )
- # 整体训练大模型(包含所有16个子模型)
- print("=== 开始训练包含16个子模型的整体模型 ===")
- trainer.train_full_model(
- train_loader,
- val_loader,
- optimizer,
- criterion,
- scheduler
- )
- # 保存包含所有16个子模型参数的整体模型
- trainer.save_model()
- print("\n=== 模型训练完成,已保存整体模型 ===")
- # 评估模型
- trainer.evaluate_model(test_loader, MSELoss())
- if __name__ == "__main__":
- main()
|