mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-12 15:26:54 +08:00
Update pytorch_transformer.py
Have passed black
This commit is contained in:
@@ -23,32 +23,6 @@ from ...model.base import Model
|
|||||||
from ...data.dataset import DatasetH, TSDatasetH
|
from ...data.dataset import DatasetH, TSDatasetH
|
||||||
from ...data.dataset.handler import DataHandlerLP
|
from ...data.dataset.handler import DataHandlerLP
|
||||||
|
|
||||||
import pdb
|
|
||||||
|
|
||||||
# qrun benchmarks/Transformer/workflow_config_transformer_Alpha158.yaml
|
|
||||||
# 0.993681, @11,
|
|
||||||
'''
|
|
||||||
'IC': 0.03186587768611013,
|
|
||||||
'ICIR': 0.2556910881045764,
|
|
||||||
'Rank IC': 0.04735251936658551,
|
|
||||||
'Rank ICIR': 0.388378955424602
|
|
||||||
|
|
||||||
'The following are analysis results of the excess return without cost.'
|
|
||||||
risk
|
|
||||||
mean 0.000309
|
|
||||||
std 0.004209
|
|
||||||
annualized_return 0.077839
|
|
||||||
information_ratio 1.164993
|
|
||||||
max_drawdown -0.106215
|
|
||||||
'The following are analysis results of the excess return with cost.'
|
|
||||||
risk
|
|
||||||
mean 0.000126
|
|
||||||
std 0.004209
|
|
||||||
annualized_return 0.031707
|
|
||||||
information_ratio 0.474567
|
|
||||||
max_drawdown -0.131948
|
|
||||||
'''
|
|
||||||
|
|
||||||
|
|
||||||
class TransformerModel(Model):
|
class TransformerModel(Model):
|
||||||
def __init__(
|
def __init__(
|
||||||
@@ -87,12 +61,7 @@ class TransformerModel(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("Naive Transformer:" "\nbatch_size : {}" "\ndevice : {}".format(self.batch_size, self.device))
|
||||||
self.logger.info(
|
|
||||||
"Naive Transformer:"
|
|
||||||
"\nbatch_size : {}"
|
|
||||||
"\ndevice : {}".format(self.batch_size, self.device)
|
|
||||||
)
|
|
||||||
|
|
||||||
if self.seed is not None:
|
if self.seed is not None:
|
||||||
np.random.seed(self.seed)
|
np.random.seed(self.seed)
|
||||||
@@ -160,7 +129,6 @@ class TransformerModel(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():
|
||||||
@@ -265,23 +233,16 @@ 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), :]
|
||||||
|
|
||||||
|
|
||||||
class Transformer(nn.Module):
|
class Transformer(nn.Module):
|
||||||
def __init__(self, d_feat=6, d_model=8, nhead=4, num_layers=2, dropout=0.5, device=None):
|
def __init__(self, d_feat=6, d_model=8, nhead=4, num_layers=2, dropout=0.5, device=None):
|
||||||
super(Transformer, self).__init__()
|
super(Transformer, self).__init__()
|
||||||
self.rnn = nn.GRU(
|
|
||||||
input_size=d_feat,
|
|
||||||
hidden_size=d_model,
|
|
||||||
num_layers=num_layers,
|
|
||||||
batch_first=True,
|
|
||||||
dropout=dropout,
|
|
||||||
)
|
|
||||||
self.feature_layer = nn.Linear(d_feat, d_model)
|
self.feature_layer = nn.Linear(d_feat, d_model)
|
||||||
self.pos_encoder = PositionalEncoding(d_model)
|
self.pos_encoder = PositionalEncoding(d_model)
|
||||||
self.encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dropout=dropout)
|
self.encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dropout=dropout)
|
||||||
@@ -291,10 +252,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]
|
||||||
|
|
||||||
# out, _ = self.rnn(src)
|
|
||||||
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]
|
||||||
@@ -309,4 +267,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