深度学习量化原理之-Python程序说明

144 篇文章 19 订阅
104 篇文章 8 订阅

关于量化原理的博客已经写了几篇

一文搞懂深度学习加速单元NPU的量化原理_papaofdoudou的博客-CSDN博客_npu原理

模型量化原理及tflite示例_papaofdoudou的博客-CSDN博客_模型量化原理

关于量化原理的思考_papaofdoudou的博客-CSDN博客

量化的数学原理_papaofdoudou的博客-CSDN博客_量化原理

本文则以一个程序来说明量化的具体计算过程:

import numpy as np

def quantization(x, s, z, alpha_q, beta_q):

    x_q = np.round(1 / s * x + z, decimals=0)
    x_q = np.clip(x_q, a_min=alpha_q, a_max=beta_q)

    return x_q

def quantization_int8(x, s, z):

    x_q = quantization(x, s, z, alpha_q=-128, beta_q=127)
    x_q = x_q.astype(np.int8)

    return x_q

def quantization_uint8(x, s, z):

    x_q = quantization(x, s, z, alpha_q=0, beta_q=255)
    x_q = x_q.astype(np.uint8)

    return x_q

def dequantization(x_q, s, z):

    x = s * (x_q - z)
    x = x.astype(np.float32)

    return x

def generate_quantization_constants(alpha, beta, alpha_q, beta_q):

    # Affine quantization mapping
    s = (beta - alpha) / (beta_q - alpha_q)
    z = int((beta * alpha_q - alpha * beta_q) / (beta - alpha))

    return s, z

def generate_quantization_int8_constants(alpha, beta):

    b = 8
    alpha_q = -2**(b - 1)
    beta_q = 2**(b - 1) - 1

    s, z = generate_quantization_constants(alpha=alpha,
                                           beta=beta,
                                           alpha_q=alpha_q,
                                           beta_q=beta_q)
    return s, z

def generate_quantization_uint8_constants(alpha, beta):

    b = 8
    alpha_q = 0
    beta_q = 2**(b) - 1

    s, z = generate_quantization_constants(alpha=alpha,
                                           beta=beta,
                                           alpha_q=alpha_q,
                                           beta_q=beta_q)

    return s, z

def relu(x, z_x, z_y, k):

    x = np.clip(x, a_min=z_x, a_max=None)
    y = z_y + k * (x - z_x)

    return y

def quantization_relu_uint8(x, s_x, z_x, s_y, z_y):

    y = relu(x=X_q, z_x=z_X, z_y=z_Y, k=s_X / s_Y)
    y = y.astype(np.uint8)

    return y

if __name__ == "__main__":

    # Set random seed for reproducibility
    random_seed = 0
    np.random.seed(random_seed)

    # Random matrices
    m = 2
    n = 4

    alpha_X = -60.0
    beta_X = 60.0
    s_X, z_X = generate_quantization_int8_constants(alpha=alpha_X, beta=beta_X)
    X = np.random.uniform(low=alpha_X, high=beta_X,
                          size=(m, n)).astype(np.float32)
    X_q = quantization_int8(x=X, s=s_X, z=z_X)

    alpha_Y = 0.0
    beta_Y = 200.0
    s_Y, z_Y = generate_quantization_uint8_constants(alpha=alpha_Y,
                                                     beta=beta_Y)
    Y_expected = relu(x=X, z_x=0, z_y=0, k=1)
    Y_q_expected = quantization_uint8(x=Y_expected, s=s_Y, z=z_Y)

    print("X:")
    print(X)
    print("X_q:")
    print(X_q)

    print("Expected Y:")
    print(Y_expected)
    print("Expected Y_q:")
    print(Y_q_expected)

    Y_q_simulated = quantization_relu_uint8(x=X,
                                            s_x=s_X,
                                            z_x=z_X,
                                            s_y=s_Y,
                                            z_y=z_Y)
    Y_simulated = dequantization(x_q=Y_q_simulated, s=s_Y, z=z_Y)

    print("Y from ReLU:")
    print(Y_simulated)
    print("Y_q from Quantized ReLU:")
    print(Y_q_simulated)

用python2执行上述程序:


结束!

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、期末大作业和毕设项目,作为参考资料学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 基于深度学习的股票价格预测和量化策略研究python源码+项目说明+数据集+PPT.zip #### 介绍 本项目通过使用A股全市场的股票数据,并先使用LightGBM模型进行对50个价量因子的筛选,选出重要程度最高的10个因子。之后再用BiLSTM模型选取进行因子组合,建立量化投资策略,最后对该策略进行实证与回测,发现该策略优于市场基准指数,说明了BiLSTM模型在股票价格预测和量化投资的实际应用价值。 #### 项目流程图 ![LightGBM-BiLSTM实验步骤] 本项目先从因子库中选取通过IR检验的50个因子。之后对因子依次进行去极值、缺失值处理、标准化和中性化的因子清洗步骤。再利用LighGBM模型进行因子选择,根据因子重要性进行排序得到前十的因子作为本横截面挑选出来的因子。紧接着利用BiLSTM对挑选出的十个因子进行组合,建立多因子模型。最后构建量化策略,进行策略回测与绩效分析。 #### 实验数据 1. 股票数据: A股市场日线数据集包含5872309行数据,即5872309个样本。A股全市场日线数据集数据集有以下11个特征,分别为股票代码(ts_code)、交易日期(trade_date)、开盘价(open)、最高价(hign)、最低价(low)、收盘价(close)、昨收价(pre_close)、涨跌额(change)、涨跌幅(pct_chg)、成交量(vol)和成交额(amount)。中证全指日线数据集包含5057行数据,即包含5057个样本。如表13所示,中证全指日线数据集有以下7个特征,分别依次为交易日期(trade_date)、开盘价(open)、最高价(hign)、最低价(low)、收盘价(close)、交易量(volume)和昨收价(pre_close)。 2. 因子数据: 本项目节使用如下方式构建价量因子,构建价量因子的基础要素有两点:首先是基础字段,其次是算子。基础字段包括日频的最高价(high)、最低价(low)、开盘价(open)、收盘价(close)、上一日收盘价(pre_close)、成交量(vol)、涨跌(pct_chg)、换手率(turnover_rate)、交易金额(amount)、总市值(total_mv)和复权因子(adj_fator)。本项目通过gplearn提供的基础算子集和自己定义的特殊算子,得到算子列表。通过将基础字段和算子不同的组合,利用遗传规划和人工数据挖掘的方法得到因子生成的公式。 #### 构建的BiLSTM模型 ![BiLSTM的网络结构] 1.层与层之间使用循环神经网络默认的tanh和linear作为激活函数。并且为了防止过拟合加入Dropout,但是如果Dropout使用过大的丢弃比列会出现欠拟合的现象,因此Dropout的丢弃比列取值为0.01。最终模型的BiLSTM循环层的神经元个数为100,采用一层BiLSTM层和三层全连接层,其中BiLSTM层和第一个全连接层之间设置了一个Dropout。 2.本项目使用数据的数据量较大,所以选用epochs=400,batch_size=1024。模型的损失函数采用均方误差(Mean Square Error,MSE)。其中优化器采用随机梯度下降(Stochastic Gradient Descent,SGD)。随机梯度下降相对于梯度下降(Gradient Descent,GD)有在信息冗余的情况下更能有效的利用信息,前期迭代效果卓越,适合处理大样本的数据这三个优势。由于本实验训练数据量较大,使用SGD的话每次仅用一个样本来迭代,训练的速度很快,可以大大减少训练所花费的时间。本实验使用keras包中的默认值,即lr=0.01、momentum=0.0、decay=0.0和nesterov=False。 ......

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papaofdoudou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值