时间序列模型SCINet模型(自定义项目)

前言

# 数据名称
parser.add_argument('--data', type=str, required=False, default='ETTh1', choices=['ETTh1', 'ETTh2', 'ETTm1'], help='name of dataset')
# 数据路径
parser.add_argument('--root_path', type=str, default='./datasets/', help='root path of the data file')
# 数据文件
parser.add_argument('--data_path', type=str, default='ETTh1.csv', help='location of the data file')
  • 然后跑一下,看看跑不跑的通,注意一定要是在GPU环境下,否则报错,后面的自定义项目是建立在原代码能跑通的情况下。

自定义项目

参数设定修改

import argparse
import os
import torch
import numpy as np
from torch.utils.tensorboard import SummaryWriter
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
from experiments.exp_power import Exp_power
# 数据名称
parser.add_argument('--data', type=str, required=False, default='power data', choices=['ETTh1', 'ETTh2', 'ETTm1'], help='name of dataset')
# 数据路径
parser.add_argument('--root_path', type=str, default='./datasets/', help='root path of the data file')
# 文件名
parser.add_argument('--data_path', type=str, default='power data.csv', help='location of the data file')
# 多变量预测
parser.add_argument('--features', type=str, default='M', choices=['S', 'M'], help='features S is univariate, M is multivariate')
# 目标列
parser.add_argument('--target', type=str, default='总有功功率(kw)', help='target feature')
# 采样间隔(分钟)
parser.add_argument('--freq', type=str, default='t', help='freq for time features encoding, options:[s:secondly, t:minutely, h:hourly, d:daily, b:business days, w:weekly, m:monthly], you can also use more detailed freq like 15min or 3h')
# 模型保存路径
parser.add_argument('--checkpoints', type=str, default='exp/ETT_checkpoints/', help='location of model checkpoints')
# 是否翻转时间序列
parser.add_argument('--inverse', type=bool, default =False, help='denorm the output data')
# 选择时间编码方式
parser.add_argument('--embed', type=str, default='timeF', help='time features encoding, options:[timeF, fixed, learned]')
parser.add_argument('--seq_len', type=int, default = 480, help='input sequence length of SCINet encoder, look back window')
parser.add_argument('--label_len', type=int, default = 288, help='start token length of Informer decoder')
parser.add_argument('--pred_len', type=int, default = 960, help='prediction sequence length, horizon')
data_parser = {'power data': {'data': 'power data.csv', 'T': '总有功功率(kw)', 'M': [5, 5, 5], 'S': [1, 1, 1], 'MS': [5, 5, 1]},}
parser.add_argument('--save', type=bool, default = True, help='save the output results')
class Exp_power(Exp_Basic):

数据处理

def _build_model(self):

        if self.args.features == 'S':
            in_dim = 1
        elif self.args.features == 'M':
            # 自定义项目需要修改
            in_dim = 5
        else:
            print('Error!')
data_dict = {'power data': Dataset_Custom}

在kaggle上使用

导入包

import sys
if not '/kaggle/input/scinet-model-data' in sys.path:
    sys.path += ['/kaggle/input/scinet-model-data']
import argparse
import os
import torch
import numpy as np
import optuna
from torch.utils.tensorboard import SummaryWriter
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"
from experiments.exp_power import Exp_power

参数传导

args = argparse.ArgumentParser(description='SCINet on ETT dataset')

args.model = 'SCINet'

args.data = 'power data'
args.root_path = '/kaggle/input/scinet-model-data/datasets/'
args.data_path = 'power data.csv'
args.features ='M'
args.target = '总有功功率(kw)'
args.freq = 't'
args.checkpoints = 'exp/power_checkpoints/'
args.inverse = False
args.embed ='timeF'


### -------  device settings --------------
args.use_gpu = True
args.gpu = 0
args.use_multi_gpu = False
args.devices = '0'

### -------  input/output length settings --------------                                                                            
args.seq_len = 480
args.label_len = 288
args.pred_len = 960
args.concat_len = 0
args.single_step = 0
args.single_step_output_One = 0
args.lastWeight = 1.0

### -------  training settings --------------  
args.cols = False
args.num_workers = 0
args.itr = 0
args.train_epochs = 100
args.batch_size = 128
args.patience = 5
args.lr = 1e-4
args.loss = 'SmoothL1Loss'
args.optim = 'AdamW'
args.lradj = 1
args.use_amp = False
# 是否保存结果文件
args.save = True
args.model_name = 'SCINet'
args.resume = False
args.evaluate = False

### -------  model settings --------------  
args.hidden_size = 1.995
args.INN = 1
args.kernel = 7
args.dilation = 1
args.window_size = 480
args.dropout = 0.5
args.positionalEcoding = False
args.groups = 1
args.levels = 3
args.stacks = 2
args.num_decoder_layer = 1
args.RIN = False
args.decompose = False

检查GPU

args.use_gpu = True if torch.cuda.is_available() and args.use_gpu else False

if args.use_gpu and args.use_multi_gpu:
    args.devices = args.devices.replace(' ', '')
    device_ids = args.devices.split(',')
    args.device_ids = [int(id_) for id_ in device_ids]
    args.gpu = args.device_ids[0]

定义数据加载

data_parser = {'power data': {'data': 'power data.csv', 'T': '总有功功率(kw)', 'M': [5, 5, 5], 'S': [1, 1, 1], 'MS': [5, 5, 1]},}

if args.data in data_parser.keys():
    data_info = data_parser[args.data]
    args.data_path = data_info['data']
    args.target = data_info['T']
    args.enc_in, args.dec_in, args.c_out = data_info[args.features]

args.detail_freq = args.freq
args.freq = args.freq[-1:]

复现设置

torch.manual_seed(2023)  # reproducible
torch.cuda.manual_seed_all(2023)
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True  # Can change it to False --> default: False
torch.backends.cudnn.enabled = True

训练模型

Exp = Exp_power

mae_ = []
maes_ = []
mse_ = []
mses_ = []

setting = '{}_levels {}_kernel {}_hidden {}'.format(args.model,args.levels,args.kernel,args.hidden_size)
exp = Exp(args)  # set experiments
exp.train(setting)
mae, maes, mse, mses = exp.test(setting)
print('{:s}:{:.4f},mae:{:.4f}'.format(setting, mse, mae))

模型参数调节

后记

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年3月19日 上午10:44
下一篇 2023年3月19日 上午11:13

相关推荐