mirror of
https://github.com/wassname/DeepTime.git
synced 2026-07-17 11:23:18 +08:00
81 KiB
81 KiB
In [1]:
import warnings
warnings.simplefilter("ignore")
# autoreload import your package
%load_ext autoreload
%autoreload 2In [2]:
import os
from os.path import join
import math
import logging
from typing import Callable, Optional, Union, Dict, Tuple
from matplotlib import pyplot as plt
from pathlib import Path
import matplotlib.colors as mcolors
import gin
from fire import Fire
import numpy as np
import torch
from torch.utils.data import DataLoader
from torch import optim
from torch import nn
from experiments.base import Experiment
from data.datasets import ForecastDataset
from models import get_model
from utils.checkpoint import Checkpoint
from utils.ops import default_device, to_tensor
from utils.losses import get_loss_fn
from utils.metrics import calc_metrics
from experiments.forecast import get_data
gin.enter_interactive_mode()In [ ]:
In [3]:
def plot(model_name="deeptime", save_path=Path("storage/experiments/Exchange/96M/repeat=0"), i=200, title=None, plot=True):
gin.clear_config()
gin.parse_config(open(save_path/"config.gin"))
train_set, train_loader = get_data(flag='train', batch_size=2)
model = get_model(model_name,
dim_size=train_set.data_x.shape[1],
datetime_feats=train_set.timestamps.shape[-1]).to(default_device())
model.load_state_dict(torch.load(save_path/'model.pth'))
model = model.eval()
b = train_set[i]
b = [bb[None, :] for bb in b]
x, y, x_time, y_time = map(to_tensor, b)
with torch.no_grad():
forecast = model(x, x_time, y_time)
if title is None:
title = str(save_path).split('/')[-3:]
title = "-".join(title)
colors = list(mcolors.BASE_COLORS.keys())
l = x.shape[1]
forecast2 = forecast[0].detach().cpu().numpy()
x2 = x[0].cpu()
y2 = y[0].cpu()
l2 = y.shape[1]
i_past = list(range(l))
i_future = list(range(l, l+l2))
if plot:
plt.title(title)
for i in range(x.shape[-1]):
plt.plot(i_past, x2[:, i], c=colors[i])
for i in range(x.shape[-1]):
plt.plot(i_future, y2[:, i], c=colors[i])
for i in range(x.shape[-1]):
plt.plot(i_future, forecast2[:, i], c=colors[i], linestyle='--')
return x2, y2, forecast2, i_past, i_future
In [39]:
def plot_multi(save_paths=[Path("storage/experiments/Exchange/96M/repeat=0")], i=200, title=None, plot=True):
for j in range(len(save_paths)):
save_path = save_paths[j]
gin.clear_config()
gin.parse_config(open(save_path/"config.gin"))
model_name = gin.query_parameter("instance.model_type")
train_set, train_loader = get_data(flag='test', batch_size=3)
model = get_model(model_name,
dim_size=train_set.data_x.shape[1],
datetime_feats=train_set.timestamps.shape[-1]).to(default_device())
model.load_state_dict(torch.load(save_path/'model.pth'))
model = model.eval()
b = train_set[i]
b = [bb[None, :] for bb in b]
b = next(iter(train_loader))
print([s.shape for s in b])
x, y, x_time, y_time = map(to_tensor, b)
# print(b)
with torch.no_grad():
forecast = model(x, x_time, y_time)
colors = list(mcolors.BASE_COLORS.keys())
l = x.shape[1]
forecast2 = forecast[0].detach().cpu().numpy()
x2 = x[0].cpu()
y2 = y[0].cpu()
l2 = y.shape[1]
i_past = list(range(l))
i_future = list(range(l, l+l2))
if plot:
plt.plot(i_past, x2[:, 0], c=colors[0], label=f"past")
plt.plot(i_future, y2[:, 0], c=colors[0], label="future true", alpha=0.3)
mtitle = str(save_path).split('/')[-2:-1]
mtitle = "-".join(mtitle)
plt.plot(i_future, forecast2[:, 0], c=colors[j], linestyle='--', label=f"{mtitle}")
plt.legend()
plt.title(title)
return x2, y2, forecast2, i_past, i_future
In [40]:
# list the models we have run...
m=sorted(Path("storage/experiments/Stocks").glob("**/_SUCCESS"))
print(m)[Path('storage/experiments/Stocks/96M/repeat=0/_SUCCESS'), Path('storage/experiments/Stocks/96S/repeat=0/_SUCCESS'), Path('storage/experiments/Stocks/96Splus/repeat=0/_SUCCESS'), Path('storage/experiments/Stocks/96Splusshort/repeat=0/_SUCCESS'), Path('storage/experiments/Stocks/96Sshort/repeat=0/_SUCCESS')]
In [42]:
for mm in m:
plot_multi(
save_paths=[
mm.parent
],
i=160
)
plt.show()
1[0;31m---------------------------------------------------------------------------[0m [0;31mIndexError[0m Traceback (most recent call last) Cell [0;32mIn [42], line 2[0m [1;32m 1[0m [38;5;28;01mfor[39;00m mm [38;5;129;01min[39;00m m: [0;32m----> 2[0m [43mplot_multi[49m[43m([49m [1;32m 3[0m [43m [49m[43msave_paths[49m[38;5;241;43m=[39;49m[43m[[49m [1;32m 4[0m [43m [49m[43mmm[49m[38;5;241;43m.[39;49m[43mparent[49m [1;32m 5[0m [43m [49m[43m][49m[43m,[49m [1;32m 6[0m [43m [49m[43mi[49m[38;5;241;43m=[39;49m[38;5;241;43m160[39;49m [1;32m 7[0m [43m [49m[43m)[49m [1;32m 8[0m plt[38;5;241m.[39mshow() [1;32m 9[0m [38;5;241m1[39m Cell [0;32mIn [39], line 9[0m, in [0;36mplot_multi[0;34m(save_paths, i, title, plot)[0m [1;32m 6[0m gin[38;5;241m.[39mparse_config([38;5;28mopen[39m(save_path[38;5;241m/[39m[38;5;124m"[39m[38;5;124mconfig.gin[39m[38;5;124m"[39m)) [1;32m 7[0m model_name [38;5;241m=[39m gin[38;5;241m.[39mquery_parameter([38;5;124m"[39m[38;5;124minstance.model_type[39m[38;5;124m"[39m) [0;32m----> 9[0m train_set, train_loader [38;5;241m=[39m [43mget_data[49m[43m([49m[43mflag[49m[38;5;241;43m=[39;49m[38;5;124;43m'[39;49m[38;5;124;43mtest[39;49m[38;5;124;43m'[39;49m[43m,[49m[43m [49m[43mbatch_size[49m[38;5;241;43m=[39;49m[38;5;241;43m3[39;49m[43m)[49m [1;32m 11[0m model [38;5;241m=[39m get_model(model_name, [1;32m 12[0m dim_size[38;5;241m=[39mtrain_set[38;5;241m.[39mdata_x[38;5;241m.[39mshape[[38;5;241m1[39m], [1;32m 13[0m datetime_feats[38;5;241m=[39mtrain_set[38;5;241m.[39mtimestamps[38;5;241m.[39mshape[[38;5;241m-[39m[38;5;241m1[39m])[38;5;241m.[39mto(default_device()) [1;32m 14[0m model[38;5;241m.[39mload_state_dict(torch[38;5;241m.[39mload(save_path[38;5;241m/[39m[38;5;124m'[39m[38;5;124mmodel.pth[39m[38;5;124m'[39m)) File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1605[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1603[0m scope_info [38;5;241m=[39m [38;5;124m"[39m[38;5;124m in scope [39m[38;5;124m'[39m[38;5;132;01m{}[39;00m[38;5;124m'[39m[38;5;124m"[39m[38;5;241m.[39mformat(scope_str) [38;5;28;01mif[39;00m scope_str [38;5;28;01melse[39;00m [38;5;124m'[39m[38;5;124m'[39m [1;32m 1604[0m err_str [38;5;241m=[39m err_str[38;5;241m.[39mformat(name, fn_or_cls, scope_info) [0;32m-> 1605[0m [43mutils[49m[38;5;241;43m.[39;49m[43maugment_exception_message_and_reraise[49m[43m([49m[43me[49m[43m,[49m[43m [49m[43merr_str[49m[43m)[49m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/utils.py:41[0m, in [0;36maugment_exception_message_and_reraise[0;34m(exception, message)[0m [1;32m 39[0m proxy [38;5;241m=[39m ExceptionProxy() [1;32m 40[0m ExceptionProxy[38;5;241m.[39m[38;5;18m__qualname__[39m [38;5;241m=[39m [38;5;28mtype[39m(exception)[38;5;241m.[39m[38;5;18m__qualname__[39m [0;32m---> 41[0m [38;5;28;01mraise[39;00m proxy[38;5;241m.[39mwith_traceback(exception[38;5;241m.[39m__traceback__) [38;5;28;01mfrom[39;00m [38;5;28mNone[39m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1582[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1579[0m new_kwargs[38;5;241m.[39mupdate(kwargs) [1;32m 1581[0m [38;5;28;01mtry[39;00m: [0;32m-> 1582[0m [38;5;28;01mreturn[39;00m [43mfn[49m[43m([49m[38;5;241;43m*[39;49m[43mnew_args[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[38;5;241;43m*[39;49m[43mnew_kwargs[49m[43m)[49m [1;32m 1583[0m [38;5;28;01mexcept[39;00m [38;5;167;01mException[39;00m [38;5;28;01mas[39;00m e: [38;5;66;03m# pylint: disable=broad-except[39;00m [1;32m 1584[0m err_str [38;5;241m=[39m [38;5;124m'[39m[38;5;124m'[39m File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/experiments/forecast.py:115[0m, in [0;36mget_data[0;34m(flag, batch_size)[0m [1;32m 113[0m [38;5;28;01melse[39;00m: [1;32m 114[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m([38;5;124mf[39m[38;5;124m'[39m[38;5;124mno such flag [39m[38;5;132;01m{[39;00mflag[38;5;132;01m}[39;00m[38;5;124m'[39m) [0;32m--> 115[0m dataset [38;5;241m=[39m [43mForecastDataset[49m[43m([49m[43mflag[49m[43m)[49m [1;32m 116[0m data_loader [38;5;241m=[39m DataLoader(dataset, [1;32m 117[0m batch_size[38;5;241m=[39mbatch_size, [1;32m 118[0m shuffle[38;5;241m=[39mshuffle, [1;32m 119[0m drop_last[38;5;241m=[39mdrop_last) [1;32m 120[0m [38;5;28;01mreturn[39;00m dataset, data_loader File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1605[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1603[0m scope_info [38;5;241m=[39m [38;5;124m"[39m[38;5;124m in scope [39m[38;5;124m'[39m[38;5;132;01m{}[39;00m[38;5;124m'[39m[38;5;124m"[39m[38;5;241m.[39mformat(scope_str) [38;5;28;01mif[39;00m scope_str [38;5;28;01melse[39;00m [38;5;124m'[39m[38;5;124m'[39m [1;32m 1604[0m err_str [38;5;241m=[39m err_str[38;5;241m.[39mformat(name, fn_or_cls, scope_info) [0;32m-> 1605[0m [43mutils[49m[38;5;241;43m.[39;49m[43maugment_exception_message_and_reraise[49m[43m([49m[43me[49m[43m,[49m[43m [49m[43merr_str[49m[43m)[49m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/utils.py:41[0m, in [0;36maugment_exception_message_and_reraise[0;34m(exception, message)[0m [1;32m 39[0m proxy [38;5;241m=[39m ExceptionProxy() [1;32m 40[0m ExceptionProxy[38;5;241m.[39m[38;5;18m__qualname__[39m [38;5;241m=[39m [38;5;28mtype[39m(exception)[38;5;241m.[39m[38;5;18m__qualname__[39m [0;32m---> 41[0m [38;5;28;01mraise[39;00m proxy[38;5;241m.[39mwith_traceback(exception[38;5;241m.[39m__traceback__) [38;5;28;01mfrom[39;00m [38;5;28mNone[39m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1582[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1579[0m new_kwargs[38;5;241m.[39mupdate(kwargs) [1;32m 1581[0m [38;5;28;01mtry[39;00m: [0;32m-> 1582[0m [38;5;28;01mreturn[39;00m [43mfn[49m[43m([49m[38;5;241;43m*[39;49m[43mnew_args[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[38;5;241;43m*[39;49m[43mnew_kwargs[49m[43m)[49m [1;32m 1583[0m [38;5;28;01mexcept[39;00m [38;5;167;01mException[39;00m [38;5;28;01mas[39;00m e: [38;5;66;03m# pylint: disable=broad-except[39;00m [1;32m 1584[0m err_str [38;5;241m=[39m [38;5;124m'[39m[38;5;124m'[39m File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py:71[0m, in [0;36mForecastDataset.__init__[0;34m(self, flag, horizon_len, scale, cross_learn, data_path, root_path, features, target, lookback_len, lookback_aux_len, lookback_mult, time_features, normalise_time_features)[0m [1;32m 69[0m [38;5;28mself[39m[38;5;241m.[39mtimestamps [38;5;241m=[39m [38;5;28;01mNone[39;00m [1;32m 70[0m [38;5;28mself[39m[38;5;241m.[39mn_time [38;5;241m=[39m [38;5;28;01mNone[39;00m [0;32m---> 71[0m [38;5;28mself[39m[38;5;241m.[39mn_time_samples [38;5;241m=[39m [38;5;28;01mNone[39;00m [1;32m 72[0m [38;5;28mself[39m[38;5;241m.[39mload_data() File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py:105[0m, in [0;36mForecastDataset.load_data[0;34m(self)[0m [1;32m 103[0m [38;5;28mself[39m[38;5;241m.[39mdata_x [38;5;241m=[39m data[border1:border2] [1;32m 104[0m [38;5;66;03m# y is just the col we predict[39;00m [0;32m--> 105[0m [38;5;28mself[39m[38;5;241m.[39mdata_y [38;5;241m=[39m [43mdata[49m[43m[[49m[43mborder1[49m[43m:[49m[43mborder2[49m[43m][49m[43m[[49m[43m[[49m[38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43mtarget[49m[43m][49m[43m][49m [1;32m 106[0m [38;5;28mself[39m[38;5;241m.[39mtimestamps [38;5;241m=[39m get_time_features(pd[38;5;241m.[39mto_datetime(df_raw[38;5;241m.[39mdate[border1:border2][38;5;241m.[39mvalues), [1;32m 107[0m normalise[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mnormalise_time_features, [1;32m 108[0m features[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mtime_features) [1;32m 109[0m [38;5;28mself[39m[38;5;241m.[39mn_time [38;5;241m=[39m [38;5;28mlen[39m([38;5;28mself[39m[38;5;241m.[39mdata_x) [0;31mIndexError[0m: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices In call to configurable 'ForecastDataset' (<class 'data.datasets.ForecastDataset'>) In call to configurable 'get_data' (<function get_data at 0x7fb53c141160>)
In [49]:
plot_multi(
save_paths=[
Path("storage/experiments/Stocks/96M/repeat=0"),
# Path("storage/experiments/Stocks/96Mplus/repeat=0"),
],
i=60
)
1[0;31m---------------------------------------------------------------------------[0m [0;31mAttributeError[0m Traceback (most recent call last) Cell [0;32mIn [49], line 1[0m [0;32m----> 1[0m [43mplot_multi[49m[43m([49m [1;32m 2[0m [43m [49m[43msave_paths[49m[38;5;241;43m=[39;49m[43m[[49m [1;32m 3[0m [43m [49m[43mPath[49m[43m([49m[38;5;124;43m"[39;49m[38;5;124;43mstorage/experiments/Stocks/96M/repeat=0[39;49m[38;5;124;43m"[39;49m[43m)[49m[43m,[49m [1;32m 4[0m [38;5;66;43;03m# Path("storage/experiments/Stocks/96Mplus/repeat=0"),[39;49;00m [1;32m 5[0m [43m [49m[43m][49m[43m,[49m [1;32m 6[0m [43m [49m[43mi[49m[38;5;241;43m=[39;49m[38;5;241;43m60[39;49m [1;32m 7[0m [43m [49m[43m)[49m [1;32m 8[0m [38;5;241m1[39m Cell [0;32mIn [39], line 18[0m, in [0;36mplot_multi[0;34m(save_paths, i, title, plot)[0m [1;32m 14[0m model[38;5;241m.[39mload_state_dict(torch[38;5;241m.[39mload(save_path[38;5;241m/[39m[38;5;124m'[39m[38;5;124mmodel.pth[39m[38;5;124m'[39m)) [1;32m 15[0m model [38;5;241m=[39m model[38;5;241m.[39meval() [0;32m---> 18[0m b [38;5;241m=[39m [43mtrain_set[49m[43m[[49m[43mi[49m[43m][49m [1;32m 19[0m b [38;5;241m=[39m [bb[[38;5;28;01mNone[39;00m, :] [38;5;28;01mfor[39;00m bb [38;5;129;01min[39;00m b] [1;32m 21[0m b [38;5;241m=[39m [38;5;28mnext[39m([38;5;28miter[39m(train_loader)) File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py:145[0m, in [0;36mForecastDataset.__getitem__[0;34m(self, idx)[0m [1;32m 143[0m cx_start [38;5;241m=[39m idx [1;32m 144[0m cx_end [38;5;241m=[39m cx_start [38;5;241m+[39m [38;5;28mself[39m[38;5;241m.[39mlookback_len [0;32m--> 145[0m c_start [38;5;241m=[39m cx_end [38;5;241m+[39m [38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43mgap[49m [1;32m 146[0m c_end [38;5;241m=[39m c_start [38;5;241m+[39m [38;5;28mself[39m[38;5;241m.[39mhorizon_len [1;32m 148[0m qx_start [38;5;241m=[39m cx_end [38;5;241m+[39m [38;5;28mself[39m[38;5;241m.[39mgap File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/torch/utils/data/dataset.py:83[0m, in [0;36mDataset.__getattr__[0;34m(self, attribute_name)[0m [1;32m 81[0m [38;5;28;01mreturn[39;00m function [1;32m 82[0m [38;5;28;01melse[39;00m: [0;32m---> 83[0m [38;5;28;01mraise[39;00m [38;5;167;01mAttributeError[39;00m [0;31mAttributeError[0m:
In [50]:
%debug> [0;32m/home/wassname/miniforge3/envs/deeptime/lib/python3.8/site-packages/torch/utils/data/dataset.py[0m(83)[0;36m__getattr__[0;34m()[0m [0;32m 81 [0;31m [0;32mreturn[0m [0mfunction[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 82 [0;31m [0;32melse[0m[0;34m:[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m---> 83 [0;31m [0;32mraise[0m [0mAttributeError[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 84 [0;31m[0;34m[0m[0m [0m[0;32m 85 [0;31m [0;34m@[0m[0mclassmethod[0m[0;34m[0m[0;34m[0m[0m [0m ipdb> u > [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py[0m(145)[0;36m__getitem__[0;34m()[0m [0;32m 143 [0;31m [0mcx_start[0m [0;34m=[0m [0midx[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 144 [0;31m [0mcx_end[0m [0;34m=[0m [0mcx_start[0m [0;34m+[0m [0mself[0m[0;34m.[0m[0mlookback_len[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m--> 145 [0;31m [0mc_start[0m [0;34m=[0m [0mcx_end[0m [0;34m+[0m [0mself[0m[0;34m.[0m[0mgap[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 146 [0;31m [0mc_end[0m [0;34m=[0m [0mc_start[0m [0;34m+[0m [0mself[0m[0;34m.[0m[0mhorizon_len[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 147 [0;31m[0;34m[0m[0m [0m ipdb> self.gap *** AttributeError ipdb> q
In [43]:
plot_multi(
save_paths=[
Path("storage/experiments/Stocks/96S/repeat=0"),
Path("storage/experiments/Stocks/96Splus/repeat=0"),
],
i=60
)
1[0;31m---------------------------------------------------------------------------[0m [0;31mIndexError[0m Traceback (most recent call last) Cell [0;32mIn [43], line 1[0m [0;32m----> 1[0m [43mplot_multi[49m[43m([49m [1;32m 2[0m [43m [49m[43msave_paths[49m[38;5;241;43m=[39;49m[43m[[49m [1;32m 3[0m [43m [49m[43mPath[49m[43m([49m[38;5;124;43m"[39;49m[38;5;124;43mstorage/experiments/Stocks/96S/repeat=0[39;49m[38;5;124;43m"[39;49m[43m)[49m[43m,[49m [1;32m 4[0m [43m [49m[43mPath[49m[43m([49m[38;5;124;43m"[39;49m[38;5;124;43mstorage/experiments/Stocks/96Splus/repeat=0[39;49m[38;5;124;43m"[39;49m[43m)[49m[43m,[49m [1;32m 5[0m [43m [49m[43m][49m[43m,[49m [1;32m 6[0m [43m [49m[43mi[49m[38;5;241;43m=[39;49m[38;5;241;43m60[39;49m [1;32m 7[0m [43m [49m[43m)[49m [1;32m 8[0m [38;5;241m1[39m Cell [0;32mIn [39], line 9[0m, in [0;36mplot_multi[0;34m(save_paths, i, title, plot)[0m [1;32m 6[0m gin[38;5;241m.[39mparse_config([38;5;28mopen[39m(save_path[38;5;241m/[39m[38;5;124m"[39m[38;5;124mconfig.gin[39m[38;5;124m"[39m)) [1;32m 7[0m model_name [38;5;241m=[39m gin[38;5;241m.[39mquery_parameter([38;5;124m"[39m[38;5;124minstance.model_type[39m[38;5;124m"[39m) [0;32m----> 9[0m train_set, train_loader [38;5;241m=[39m [43mget_data[49m[43m([49m[43mflag[49m[38;5;241;43m=[39;49m[38;5;124;43m'[39;49m[38;5;124;43mtest[39;49m[38;5;124;43m'[39;49m[43m,[49m[43m [49m[43mbatch_size[49m[38;5;241;43m=[39;49m[38;5;241;43m3[39;49m[43m)[49m [1;32m 11[0m model [38;5;241m=[39m get_model(model_name, [1;32m 12[0m dim_size[38;5;241m=[39mtrain_set[38;5;241m.[39mdata_x[38;5;241m.[39mshape[[38;5;241m1[39m], [1;32m 13[0m datetime_feats[38;5;241m=[39mtrain_set[38;5;241m.[39mtimestamps[38;5;241m.[39mshape[[38;5;241m-[39m[38;5;241m1[39m])[38;5;241m.[39mto(default_device()) [1;32m 14[0m model[38;5;241m.[39mload_state_dict(torch[38;5;241m.[39mload(save_path[38;5;241m/[39m[38;5;124m'[39m[38;5;124mmodel.pth[39m[38;5;124m'[39m)) File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1605[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1603[0m scope_info [38;5;241m=[39m [38;5;124m"[39m[38;5;124m in scope [39m[38;5;124m'[39m[38;5;132;01m{}[39;00m[38;5;124m'[39m[38;5;124m"[39m[38;5;241m.[39mformat(scope_str) [38;5;28;01mif[39;00m scope_str [38;5;28;01melse[39;00m [38;5;124m'[39m[38;5;124m'[39m [1;32m 1604[0m err_str [38;5;241m=[39m err_str[38;5;241m.[39mformat(name, fn_or_cls, scope_info) [0;32m-> 1605[0m [43mutils[49m[38;5;241;43m.[39;49m[43maugment_exception_message_and_reraise[49m[43m([49m[43me[49m[43m,[49m[43m [49m[43merr_str[49m[43m)[49m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/utils.py:41[0m, in [0;36maugment_exception_message_and_reraise[0;34m(exception, message)[0m [1;32m 39[0m proxy [38;5;241m=[39m ExceptionProxy() [1;32m 40[0m ExceptionProxy[38;5;241m.[39m[38;5;18m__qualname__[39m [38;5;241m=[39m [38;5;28mtype[39m(exception)[38;5;241m.[39m[38;5;18m__qualname__[39m [0;32m---> 41[0m [38;5;28;01mraise[39;00m proxy[38;5;241m.[39mwith_traceback(exception[38;5;241m.[39m__traceback__) [38;5;28;01mfrom[39;00m [38;5;28mNone[39m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1582[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1579[0m new_kwargs[38;5;241m.[39mupdate(kwargs) [1;32m 1581[0m [38;5;28;01mtry[39;00m: [0;32m-> 1582[0m [38;5;28;01mreturn[39;00m [43mfn[49m[43m([49m[38;5;241;43m*[39;49m[43mnew_args[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[38;5;241;43m*[39;49m[43mnew_kwargs[49m[43m)[49m [1;32m 1583[0m [38;5;28;01mexcept[39;00m [38;5;167;01mException[39;00m [38;5;28;01mas[39;00m e: [38;5;66;03m# pylint: disable=broad-except[39;00m [1;32m 1584[0m err_str [38;5;241m=[39m [38;5;124m'[39m[38;5;124m'[39m File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/experiments/forecast.py:115[0m, in [0;36mget_data[0;34m(flag, batch_size)[0m [1;32m 113[0m [38;5;28;01melse[39;00m: [1;32m 114[0m [38;5;28;01mraise[39;00m [38;5;167;01mValueError[39;00m([38;5;124mf[39m[38;5;124m'[39m[38;5;124mno such flag [39m[38;5;132;01m{[39;00mflag[38;5;132;01m}[39;00m[38;5;124m'[39m) [0;32m--> 115[0m dataset [38;5;241m=[39m [43mForecastDataset[49m[43m([49m[43mflag[49m[43m)[49m [1;32m 116[0m data_loader [38;5;241m=[39m DataLoader(dataset, [1;32m 117[0m batch_size[38;5;241m=[39mbatch_size, [1;32m 118[0m shuffle[38;5;241m=[39mshuffle, [1;32m 119[0m drop_last[38;5;241m=[39mdrop_last) [1;32m 120[0m [38;5;28;01mreturn[39;00m dataset, data_loader File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1605[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1603[0m scope_info [38;5;241m=[39m [38;5;124m"[39m[38;5;124m in scope [39m[38;5;124m'[39m[38;5;132;01m{}[39;00m[38;5;124m'[39m[38;5;124m"[39m[38;5;241m.[39mformat(scope_str) [38;5;28;01mif[39;00m scope_str [38;5;28;01melse[39;00m [38;5;124m'[39m[38;5;124m'[39m [1;32m 1604[0m err_str [38;5;241m=[39m err_str[38;5;241m.[39mformat(name, fn_or_cls, scope_info) [0;32m-> 1605[0m [43mutils[49m[38;5;241;43m.[39;49m[43maugment_exception_message_and_reraise[49m[43m([49m[43me[49m[43m,[49m[43m [49m[43merr_str[49m[43m)[49m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/utils.py:41[0m, in [0;36maugment_exception_message_and_reraise[0;34m(exception, message)[0m [1;32m 39[0m proxy [38;5;241m=[39m ExceptionProxy() [1;32m 40[0m ExceptionProxy[38;5;241m.[39m[38;5;18m__qualname__[39m [38;5;241m=[39m [38;5;28mtype[39m(exception)[38;5;241m.[39m[38;5;18m__qualname__[39m [0;32m---> 41[0m [38;5;28;01mraise[39;00m proxy[38;5;241m.[39mwith_traceback(exception[38;5;241m.[39m__traceback__) [38;5;28;01mfrom[39;00m [38;5;28mNone[39m File [0;32m~/miniforge3/envs/deeptime/lib/python3.8/site-packages/gin/config.py:1582[0m, in [0;36m_make_gin_wrapper.<locals>.gin_wrapper[0;34m(*args, **kwargs)[0m [1;32m 1579[0m new_kwargs[38;5;241m.[39mupdate(kwargs) [1;32m 1581[0m [38;5;28;01mtry[39;00m: [0;32m-> 1582[0m [38;5;28;01mreturn[39;00m [43mfn[49m[43m([49m[38;5;241;43m*[39;49m[43mnew_args[49m[43m,[49m[43m [49m[38;5;241;43m*[39;49m[38;5;241;43m*[39;49m[43mnew_kwargs[49m[43m)[49m [1;32m 1583[0m [38;5;28;01mexcept[39;00m [38;5;167;01mException[39;00m [38;5;28;01mas[39;00m e: [38;5;66;03m# pylint: disable=broad-except[39;00m [1;32m 1584[0m err_str [38;5;241m=[39m [38;5;124m'[39m[38;5;124m'[39m File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py:71[0m, in [0;36mForecastDataset.__init__[0;34m(self, flag, horizon_len, scale, cross_learn, data_path, root_path, features, target, lookback_len, lookback_aux_len, lookback_mult, time_features, normalise_time_features)[0m [1;32m 69[0m [38;5;28mself[39m[38;5;241m.[39mtimestamps [38;5;241m=[39m [38;5;28;01mNone[39;00m [1;32m 70[0m [38;5;28mself[39m[38;5;241m.[39mn_time [38;5;241m=[39m [38;5;28;01mNone[39;00m [0;32m---> 71[0m [38;5;28mself[39m[38;5;241m.[39mn_time_samples [38;5;241m=[39m [38;5;28;01mNone[39;00m [1;32m 72[0m [38;5;28mself[39m[38;5;241m.[39mload_data() File [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py:105[0m, in [0;36mForecastDataset.load_data[0;34m(self)[0m [1;32m 103[0m [38;5;28mself[39m[38;5;241m.[39mdata_x [38;5;241m=[39m data[border1:border2] [1;32m 104[0m [38;5;66;03m# y is just the col we predict[39;00m [0;32m--> 105[0m [38;5;28mself[39m[38;5;241m.[39mdata_y [38;5;241m=[39m [43mdata[49m[43m[[49m[43mborder1[49m[43m:[49m[43mborder2[49m[43m][49m[43m[[49m[43m[[49m[38;5;28;43mself[39;49m[38;5;241;43m.[39;49m[43mtarget[49m[43m][49m[43m][49m [1;32m 106[0m [38;5;28mself[39m[38;5;241m.[39mtimestamps [38;5;241m=[39m get_time_features(pd[38;5;241m.[39mto_datetime(df_raw[38;5;241m.[39mdate[border1:border2][38;5;241m.[39mvalues), [1;32m 107[0m normalise[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mnormalise_time_features, [1;32m 108[0m features[38;5;241m=[39m[38;5;28mself[39m[38;5;241m.[39mtime_features) [1;32m 109[0m [38;5;28mself[39m[38;5;241m.[39mn_time [38;5;241m=[39m [38;5;28mlen[39m([38;5;28mself[39m[38;5;241m.[39mdata_x) [0;31mIndexError[0m: only integers, slices (`:`), ellipsis (`...`), numpy.newaxis (`None`) and integer or boolean arrays are valid indices In call to configurable 'ForecastDataset' (<class 'data.datasets.ForecastDataset'>) In call to configurable 'get_data' (<function get_data at 0x7fb53c141160>)
In [44]:
%debug> [0;32m/media/wassname/SGIronWolf/projects5/investing/DeepTime/data/datasets.py[0m(105)[0;36mload_data[0;34m()[0m [0;32m 103 [0;31m [0mself[0m[0;34m.[0m[0mdata_x[0m [0;34m=[0m [0mdata[0m[0;34m[[0m[0mborder1[0m[0;34m:[0m[0mborder2[0m[0;34m][0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 104 [0;31m [0;31m# y is just the col we predict[0m[0;34m[0m[0;34m[0m[0;34m[0m[0m [0m[0;32m--> 105 [0;31m [0mself[0m[0;34m.[0m[0mdata_y[0m [0;34m=[0m [0mdata[0m[0;34m[[0m[0mborder1[0m[0;34m:[0m[0mborder2[0m[0;34m][0m[0;34m[[0m[0;34m[[0m[0mself[0m[0;34m.[0m[0mtarget[0m[0;34m][0m[0;34m][0m[0;34m[0m[0;34m[0m[0m [0m[0;32m 106 [0;31m self.timestamps = get_time_features(pd.to_datetime(df_raw.date[border1:border2].values), [0m[0;32m 107 [0;31m [0mnormalise[0m[0;34m=[0m[0mself[0m[0;34m.[0m[0mnormalise_time_features[0m[0;34m,[0m[0;34m[0m[0;34m[0m[0m [0m ipdb> self.target 'RSMKs_18_144_72' ipdb> data[border1:border2] array([[-0.31080395], [-0.30072371], [-0.29116544], ..., [-0.14084614], [-0.15264537], [-0.16396183]]) ipdb> data array([[ 0.08264075], [ 0.08548946], [ 0.08766026], ..., [-0.14084614], [-0.15264537], [-0.16396183]]) ipdb> data.shape (53398, 1) ipdb> q
In [38]:
plot_multi(
save_paths=[
Path("storage/experiments/Stocks/96Sshort/repeat=0"),
Path("storage/experiments/Stocks/96Splusshort/repeat=0"),
], i=60)
1Out [38]:
torch.Size([1, 54, 1]) torch.Size([1, 54, 256]) 3 torch.Size([3, 54, 256]) receptive field [690 378 242]=[138 18 2]*[[ 1 1 1] [ 1 2 4] [ 1 4 16] [ 1 6 36] [ 1 8 64]]
1
In [ ]:
# plot("deeptime", Path("storage/experiments/Exchange/96S/repeat=0"));In [ ]:
def plot_multiM(save_paths=[Path("storage/experiments/Exchange/96M/repeat=0")], i=200, title=None, plot=True):
for j in range(len(save_paths)):
save_path = save_paths[j]
gin.clear_config()
gin.parse_config(open(save_path/"config.gin"))
model_name = gin.query_parameter("instance.model_type")
train_set, train_loader = get_data(flag='train', batch_size=2)
model = get_model(model_name,
dim_size=train_set.data_x.shape[1],
datetime_feats=train_set.timestamps.shape[-1]).to(default_device())
model.load_state_dict(torch.load(save_path/'model.pth'))
model = model.eval()
b = train_set[i]
b = [bb[None, :] for bb in b]
x, y, x_time, y_time = map(to_tensor, b)
with torch.no_grad():
forecast = model(x, x_time, y_time)
colors = list(mcolors.BASE_COLORS.keys())
l = x.shape[1]
forecast2 = forecast[0].detach().cpu().numpy()
x2 = x[0].cpu()
y2 = y[0].cpu()
l2 = y.shape[1]
i_past = list(range(l))
i_future = list(range(l, l+l2))
linestyles = [ '--', '-.', '-', ':']
if plot:
ls = linestyles[j]
print(ls)
if j==0:
for k in range(x.shape[-1]):
plt.plot(i_past, x2[:, k], c=colors[k], label=f"var {k}")
for k in range(x.shape[-1]):
plt.plot(i_future, y2[:, k], c=colors[k], alpha=0.3)
mtitle = str(save_path).split('/')[-2:-1]
mtitle = "-".join(mtitle)
for k in range(x.shape[-1]):
plt.plot(i_future, forecast2[:, k], c=colors[k], linestyle=ls, label=f"{mtitle}" if k==0 else None)
plt.legend()
plt.title(title)
return x2, y2, forecast2, i_past, i_future
In [ ]:
plot_multiM([Path("storage/experiments/Stocks/96M/repeat=0")]);In [ ]:
In [ ]: