Bigmodels模型库
由qxiao创建,最终由qxiao 被浏览 567 用户
BigQuant AI Platform deep learning models(BigQuant AI量化平台深度学习模型库)。
介绍
bigmodels是什么?
bigmodels是BigQuant AI量化平台的深度学习模型库,集成了AI量化研究过程中常用的深度学习模型。
为什么需要bigmodels?
我们用PyTorch封装了AI量化研究中常用的深度学习模型,包含DNN、1DCNN、LSTM和Transformer等,并持续更新。
平台用户可以用简单的方式调用经过大量实践检验的AI能力,赋能AI量化投资。
import toch
import torch.nn as nn
from bigmodels.models import DNN
# 可视化模块进行因子挖掘和数据划分
x_train, y_train, x_val, y_val = train_test_split(....)
# 模型定义
model = DNN(feature_size=98)
# 模型编译
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss = nn.MSELoss()
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.compile(optimizer=opt, loss=loss, device=device)
# 模型训练
model.fit(x_train, y_train, validation_data=(x_val, y_val), epochs=10, verbose=1)
# 模型预测
y_pred = model.predict(x_test)
一、快速入门
这里用DNN作为例子,介绍如何快速使用bigmodels加速量化模型的构建速度。
1.1 模型导入
这里从bigmodels库中导入DNN模型。
from bigmodels.models import DNN
model = DNN(feature_size=98)
1.2 模型编译
定义好模型之后我们需要通过编译(compile)来对学习过程进行配置,我们可以为模型的编译指定各类参数包括:
- optimizer - 优化器
- criterion - 损失函数
- metrics - 评估函数
- device: 是否调用GPU,默认调用CPU
example:
import torch
import torch.nn as nn
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
loss = nn.MSELoss()
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
model.compile(optimizer=opt, loss=loss, device=device)
1.3 模型训练
调用fit方法,训练模型。参数有:
- x: 训练集数据
- y: 训练集标签
- validation_data: 验证数据集
- epochs: 训练的次数,默认10个epoch
- batch_size: - 每一个批次训练的样本数
- verbose: 是否输出训练过程的数据,0不输出,1输出
- num_workers: 数据预处理的进程数,默认为0
- callbacks: 回调函数
- shuffle: 是否打乱数据集,默认打乱
example:
model.fit(x_train, y_train, validation_data=(x_val, y_val), batch_size=512, epochs=10, verbose=1, num_workers=0)
1.4 模型预测
predict方法预测。
参数有:
- x: 预测数据
- batch_size: 每一个批次预测的样本数,默认32
example:
model.predict(x_test, batch_size=32)
二、Models Zoo
- [x] DNN
- [ ] 1DCNN
- [x] LSTM
- [x] Transformer
- [x] TabNet
- [x] TRA
三、进阶
3.1 自定义模型
介绍如何快速的自定义自己的深度学习模型。
首先,bigmodels的所有模型都继承了BaseModel,BaseModel是pytorch的Module。
自定义模型只需要继承BaseModel,然后用torch的方式定义模型。
参考:https://pytorch.org/docs/stable/generated/torch.nn.Module.html#torch.nn.Module
from bigmodels.models import BaseModel
class CustomModel(BaseModel):
def __init__(self, feature_size=98, output_size=1, hidden_size=[256, 128, 64], dropout=0.5):
super(DNN, self).__init__()
self.feature_size = feature_size
self.linear_1 = nn.Linear(feature_size, hidden_size[0])
self.relu_1 = nn.ReLU()
modules = []
last_size = hidden_size[0]
for size in hidden_size:
modules.append(nn.Linear(last_size, size))
modules.append(nn.ReLU())
modules.append(nn.Dropout(dropout))
last_size = size
self.hidden_layers = nn.Sequential(*modules)
self.out = nn.Linear(last_size, output_size)
def forward(self, x):
x = self.linear_1(x)
x = self.relu_1(x)
x = self.hidden_layers(x)
x = self.out(x)
return x.squeeze()
# 测试
if __name__ == "__main__":
model = CustomModel(300)
x = torch.rand([32, 300])
output = model(x)
print(output.shape)
\