欢迎光临散文网 会员登陆 & 注册

合约量化系统开发(量化Demo)丨量化合约系统开发(规则分析)丨源码

2023-03-21 15:52 作者:bili_33032327742  | 我要投稿

  量化demo


  1.转换onnx模型


  首先需要将torch模型转换为onnx模型。转换主要是两种场景目的:转换torchvision的预训练模型、转换自定义模型。


  转换都是两个步骤:加载模型和权重、调onnx接口转换


  model=models.vgg16(pretrained=True)就会将模型下载到相应路径


  #coding=gbk


  #由.pt导成.onnx


  import torch


  import torchvision.models as models


  #定义模型和载入模型权重


  #model=models.resnet18()#【改】定义model


  #model=models.resnet50()


  model=models.vgg16(pretrained=False)


  model.load_state_dict(torch.load("/home/xxx/.cache/torch/hub/checkpoints/vgg16-397923af.pth"))#【改】model权重地址


  ##set the model to inference mode


  model.eval()关于区块链项目技术开发威:yy625019


  x=torch.randn(1,3,224,224)#生成张量


  export_onnx_file="/home/xxx/model_optimization_tool/jm_log_quant/onnx_format_weight/vgg16.onnx"#【改】输出ONNX权重地址


  torch.onnx.export(model,


  x,


  export_onnx_file,


  opset_version=10,


  do_constant_folding=True,#是否执行常量折叠优化


  input_names=["input"],#输入名


  output_names=["output"],#输出名


  dynamic_axes={"input":{0:"batch_size"},#批处理变量


  "output":{0:"batch_size"}})


  1)准备数据集和原始onnx模型


  按照教程,要在当前目录新建working/data文件夹,将生成的数据集(格式为.npy)放在文件夹里。(视频二还有另一种载入数据方式)


  原始模型onnx放在working/文件夹


  1.只想跑demo不管真实数据,可以生成随机数据集


  #生成随机数据集


  import numpy as np


  for i in range(32):


  np.save(file=f'working/data/{i+1}',arr=np.random.random(size=[1,3,224,224]))


  2.载入imagenet数据集


  #载入ImageNet校准数据集


  import os


  import torchvision.transforms as transforms


  from PIL import Image


  import numpy as np


  import torch


  input_path="xxxxxxx/xxxxx/x"#【改】数据集路径


  for file in os.listdir(input_path):


  filename=os.fsdecode(file)


  img=Image.open(os.path.join(input_path,filename)).convert('RGB')


  scaler=transforms.Resize((224,224))


  normalize=transforms.Normalize(mean=[0.485,0.456,0.406],


  std=[0.229,0.224,0.225])


  to_tensor=transforms.ToTensor()


  device=torch.device("cpu")


  image=normalize(to_tensor(scaler(img))).unsqueeze(0).to(device)


  np.save(file=f'working/data/{filename[:-4]}',arr=image)#【改】注意图像格式是.jpg还是.jpeg,.jpeg则filename[:-5]


  print('{}已完成,进度{}/{}'.format(filename[:-5],os.listdir(input_path).index(file),len(os.listdir(input_path)


合约量化系统开发(量化Demo)丨量化合约系统开发(规则分析)丨源码的评论 (共 条)

分享到微博请遵守国家法律