1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import torch
- from KoopmanESNModel import KoopmanESNConfig, KoopmanESN
- from BaseModel.ESNModel import ESN
- from DataProcess import DataLoad
- import numpy as np
- import matplotlib.pyplot as plt
- KoopmanModel = torch.load('./ModelLib/DeepKoopmanModel.pt', map_location="cpu")
- encoder = KoopmanModel.encoder
- decoder = KoopmanModel.decoder
- A = KoopmanModel.A.detach().numpy()
- state_dim = KoopmanModel.state_dim
- latent_dim = KoopmanModel.latent_dim
- lr = 0.5
- sr = 0.9
- sp = 0.1
- ridge = 1e-7
- train_start = 15000
- train_len = 5000
- train_warmup = 100
- predict_warmup = 100
- predict_len = 5000
- Koopmanconfig = KoopmanESNConfig(
- units=latent_dim,
- lr=lr,
- sr=sr,
- sp=sp,
- ridge=ridge,
- train_start=train_start,
- train_len=train_len,
- train_warmup=train_warmup,
- predict_warmup=predict_warmup,
- predict_len=predict_len,
- state_dim=latent_dim
- )
- ESNconfig = KoopmanESNConfig(
- units=500,
- lr=lr,
- sr=sr,
- sp=sp,
- ridge=ridge,
- train_start=train_start,
- train_len=train_len,
- train_warmup=train_warmup,
- predict_warmup=predict_warmup,
- predict_len=predict_len,
- state_dim=state_dim
- )
- KoopESNModel = KoopmanESN(
- config=Koopmanconfig,
- A=A
- )
- ESNModel = ESN(
- config=ESNconfig
- )
- _, DataTrainKoop, DataWarmKoop, DataValKoop = DataLoad('./DataLib/LatentNor.csv', Koopmanconfig)
- # KoopmanESN
- KoopESNModel.koopmanesn_train(DataTrainKoop)
- DataPreKoop = KoopESNModel.predict(DataWarmKoop)
- DataPreKoop_Ten = torch.from_numpy(DataPreKoop).float()
- DataValKoop_Ten = torch.from_numpy(DataValKoop).float()
- DataWarmKoop_Ten = torch.from_numpy(DataWarmKoop).float()
- StatePreKoop_Ten = decoder(DataPreKoop_Ten)
- StateValKoop_Ten = decoder(DataValKoop_Ten)
- StateWarmKoop_Ten = decoder(DataWarmKoop_Ten)
- StatePreKoop = StatePreKoop_Ten.detach().numpy()
- StateValKoop = StateValKoop_Ten.detach().numpy()
- StateWarmKoop = StateWarmKoop_Ten.detach().numpy()
- KoopMSE = np.linalg.norm(StatePreKoop - StateValKoop, ord='fro') ** 2 / np.prod(StateValKoop.shape)
- print(KoopMSE)
- t = np.arange(Koopmanconfig.predict_warmup + Koopmanconfig.predict_len)
- DataMaxMin = np.loadtxt('./DataLib/DataMaxMin.csv', delimiter=',')
- DataMax = DataMaxMin[0, :]
- DataMin = DataMaxMin[1, :]
- StateWarmKoop = (StateWarmKoop + 1) * (DataMax-DataMin) + DataMin
- StatePreKoop = (StatePreKoop + 1) * (DataMax-DataMin) + DataMin
- StateValKoop = (StateValKoop + 1) * (DataMax-DataMin) + DataMin
- for fea in np.arange(state_dim):
- plt.figure(fea)
- plt.plot(t[:Koopmanconfig.predict_warmup], StateWarmKoop[:, fea])
- plt.plot(t[-Koopmanconfig.predict_len:], StatePreKoop[:, fea],
- linestyle="--", color='red', label='KoopmanESNPre')
- plt.plot(t[-Koopmanconfig.predict_len:], StateValKoop[:, fea],
- linestyle="-", color='blue', label='StateReal')
- plt.legend()
- plt.show()
|