mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-16 09:11:00 +08:00
Update pytorch_localformer.py
Have passed black.
This commit is contained in:
@@ -24,32 +24,6 @@ from ...data.dataset import DatasetH, TSDatasetH
|
|||||||
from ...data.dataset.handler import DataHandlerLP
|
from ...data.dataset.handler import DataHandlerLP
|
||||||
from torch.nn.modules.container import ModuleList
|
from torch.nn.modules.container import ModuleList
|
||||||
|
|
||||||
import pdb
|
|
||||||
|
|
||||||
# qrun benchmarks/Transformer/workflow_config_localformer_Alpha158.yaml
|
|
||||||
# 0.992366, @13,
|
|
||||||
'''
|
|
||||||
{'IC': 0.037426503365732174,
|
|
||||||
'ICIR': 0.28977883455541603,
|
|
||||||
'Rank IC': 0.04659889541774283,
|
|
||||||
'Rank ICIR': 0.373569340092482}
|
|
||||||
|
|
||||||
'The following are analysis results of the excess return without cost.'
|
|
||||||
risk
|
|
||||||
mean 0.000381
|
|
||||||
std 0.004109
|
|
||||||
annualized_return 0.096066
|
|
||||||
information_ratio 1.472729
|
|
||||||
max_drawdown -0.094917
|
|
||||||
'The following are analysis results of the excess return with cost.'
|
|
||||||
risk
|
|
||||||
mean 0.000213
|
|
||||||
std 0.004111
|
|
||||||
annualized_return 0.053630
|
|
||||||
information_ratio 0.821711
|
|
||||||
max_drawdown -0.113694
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
class LocalformerModel(Model):
|
class LocalformerModel(Model):
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -88,11 +62,8 @@ class LocalformerModel(Model):
|
|||||||
self.device = torch.device("cuda:%d" % GPU if torch.cuda.is_available() and GPU >= 0 else "cpu")
|
self.device = torch.device("cuda:%d" % GPU if torch.cuda.is_available() and GPU >= 0 else "cpu")
|
||||||
self.seed = seed
|
self.seed = seed
|
||||||
self.logger = get_module_logger("TransformerModel")
|
self.logger = get_module_logger("TransformerModel")
|
||||||
print('do we have gpu?{}'.format(torch.cuda.is_available()))
|
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
"Improved Transformer:"
|
"Improved Transformer:" "\nbatch_size : {}" "\ndevice : {}".format(self.batch_size, self.device)
|
||||||
"\nbatch_size : {}"
|
|
||||||
"\ndevice : {}".format(self.batch_size, self.device)
|
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.seed is not None:
|
if self.seed is not None:
|
||||||
@@ -161,7 +132,6 @@ class LocalformerModel(Model):
|
|||||||
for data in data_loader:
|
for data in data_loader:
|
||||||
|
|
||||||
feature = data[:, :, 0:-1].to(self.device)
|
feature = data[:, :, 0:-1].to(self.device)
|
||||||
# feature[torch.isnan(feature)] = 0
|
|
||||||
label = data[:, -1, -1].to(self.device)
|
label = data[:, -1, -1].to(self.device)
|
||||||
|
|
||||||
with torch.no_grad():
|
with torch.no_grad():
|
||||||
@@ -266,11 +236,11 @@ class PositionalEncoding(nn.Module):
|
|||||||
pe[:, 0::2] = torch.sin(position * div_term)
|
pe[:, 0::2] = torch.sin(position * div_term)
|
||||||
pe[:, 1::2] = torch.cos(position * div_term)
|
pe[:, 1::2] = torch.cos(position * div_term)
|
||||||
pe = pe.unsqueeze(0).transpose(0, 1)
|
pe = pe.unsqueeze(0).transpose(0, 1)
|
||||||
self.register_buffer('pe', pe)
|
self.register_buffer("pe", pe)
|
||||||
|
|
||||||
def forward(self, x):
|
def forward(self, x):
|
||||||
# [T, N, F]
|
# [T, N, F]
|
||||||
return x + self.pe[:x.size(0), :]
|
return x + self.pe[: x.size(0), :]
|
||||||
|
|
||||||
|
|
||||||
def _get_clones(module, N):
|
def _get_clones(module, N):
|
||||||
@@ -278,7 +248,7 @@ def _get_clones(module, N):
|
|||||||
|
|
||||||
|
|
||||||
class LocalformerEncoder(nn.Module):
|
class LocalformerEncoder(nn.Module):
|
||||||
__constants__ = ['norm']
|
__constants__ = ["norm"]
|
||||||
|
|
||||||
def __init__(self, encoder_layer, num_layers, d_model):
|
def __init__(self, encoder_layer, num_layers, d_model):
|
||||||
super(LocalformerEncoder, self).__init__()
|
super(LocalformerEncoder, self).__init__()
|
||||||
@@ -295,7 +265,7 @@ class LocalformerEncoder(nn.Module):
|
|||||||
out = output.transpose(1, 0).transpose(2, 1)
|
out = output.transpose(1, 0).transpose(2, 1)
|
||||||
out = self.conv[i](out).transpose(2, 1).transpose(1, 0)
|
out = self.conv[i](out).transpose(2, 1).transpose(1, 0)
|
||||||
|
|
||||||
output = mod(output+out, src_mask=mask)
|
output = mod(output + out, src_mask=mask)
|
||||||
|
|
||||||
return output + out
|
return output + out
|
||||||
|
|
||||||
@@ -319,9 +289,7 @@ class Transformer(nn.Module):
|
|||||||
self.d_feat = d_feat
|
self.d_feat = d_feat
|
||||||
|
|
||||||
def forward(self, src):
|
def forward(self, src):
|
||||||
# pdb.set_trace()
|
|
||||||
# src [N, T, F], [512, 60, 6]
|
# src [N, T, F], [512, 60, 6]
|
||||||
|
|
||||||
src = self.feature_layer(src) # [512, 60, 8]
|
src = self.feature_layer(src) # [512, 60, 8]
|
||||||
|
|
||||||
# src [N, T, F] --> [T, N, F], [60, 512, 8]
|
# src [N, T, F] --> [T, N, F], [60, 512, 8]
|
||||||
@@ -338,4 +306,3 @@ class Transformer(nn.Module):
|
|||||||
output = self.decoder_layer(output.transpose(1, 0)[:, -1, :]) # [512, 1]
|
output = self.decoder_layer(output.transpose(1, 0)[:, -1, :]) # [512, 1]
|
||||||
|
|
||||||
return output.squeeze()
|
return output.squeeze()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user