精华内容
下载资源
问答
  • 4. 构建模型

    千次阅读 2018-12-12 16:37:38
    数据集和代码均已上传到Github中,欢迎大家下载使用。 ... 如果这个教程对您有所...构建模型 本节使用keras搭建一个简单的CNN模型。该CNN模型包括3个卷积层、3个池化层、2个全连接层,中间层激活函数使用ReLU,最后...

    数据集和代码均已上传到Github中,欢迎大家下载使用。

    Github地址:https://github.com/JasonZhang156/Sound-Recognition-Tutorial

    如果这个教程对您有所帮助,请不吝贡献您的小星星Q^Q.


    构建模型

    本节使用keras搭建一个简单的CNN模型。该CNN模型包括3个卷积层、3个池化层、2个全连接层,中间层激活函数使用ReLU,最后一层使用softmax,每个卷积层后使用 Batch Normalization加速训练。优化器使用SGD,损失函数使用交叉熵(Cross Entropy)。模型详细配置如下:

    Keras实现代码如下:

    # -*- coding: utf-8 -*-
    """
    @author: Jason Zhang
    @github: https://github.com/JasonZhang156/Sound-Recognition-Tutorial
    """
    
    from keras.layers import Input
    from keras.layers import Conv2D, MaxPool2D, Dense, Dropout, BatchNormalization, Activation, GlobalAvgPool2D
    from keras.models import Model
    from keras import optimizers
    from keras.utils import plot_model
    
    
    def CNN(input_shape=(60,65,1), nclass=10):
        """
        build a simple cnn model using keras with TensorFlow backend.
        :param input_shape: input shape of network, default as (60,65,1)
        :param nclass: numbers of class(output shape of network), default as 10
        :return: cnn model
        """
        input_ = Input(shape=input_shape)
    
        # Conv1
        x = Conv2D(64, kernel_size=(3, 3), strides=(1, 1), padding='same')(input_)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x)
    
        # Conv2
        x = Conv2D(128, kernel_size=(3, 3), strides=(1, 1), padding='same')(x)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x)
    
        # Conv3
        x = Conv2D(256, kernel_size=(3, 3), strides=(1, 1), padding='same')(x)
        x = BatchNormalization()(x)
        x = Activation('relu')(x)
        x = MaxPool2D(pool_size=(2, 2), strides=(2, 2))(x)
    
        # GAP
        x = GlobalAvgPool2D()(x)
        # Dense_1
        x = Dense(256, activation='relu')(x)
        x = Dropout(0.5)(x)
        # Dense_2
        output_ = Dense(nclass, activation='softmax')(x)
    
        model = Model(inputs=input_, outputs=output_)
        # 输出模型的参数信息
        model.summary()
        # 配置模型训练过程
        sgd = optimizers.sgd(lr=0.01, momentum=0.9, nesterov=True)  # 优化器为SGD
        model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])  # 交叉熵为cross entropy
    
        return model
    
    if __name__ == '__main__':
        model = CNN()
        plot_model(model, './image/cnn.png')  # 保存模型图

    上述代码包含在Github中的models.py文件中。

    展开全文
  • 5. 投资组合构建模型 5.1 基于规则的投资组合构建模型 5.2 基于优化的投资组合构建模型 5.2.1 优化工具的输入变量 5.2.2 优化技术 6. 执行模型 6.1 订单执行算法 6.1.1 进取订单和被动订单 6.1.2 其他订单...

    目录

    5. 投资组合构建模型

    5.1 基于规则的投资组合构建模型

    5.2 基于优化的投资组合构建模型

    5.2.1 优化工具的输入变量

    5.2.2 优化技术

    6. 执行模型

    6.1 订单执行算法

    6.1.1 进取订单和被动订单

    6.1.2 其他订单类型

    6.1.3 大订单和小订单

    6.1.4 何处下单

    6.2 交易基础设施


    5. 投资组合构建模型

    投资组合构建模型的目的是为了决定宽客所持有的投资组合。如何分配投资组合中各种产品的比例,主要需要考虑期望收益、风险和交易成本之间的平衡。前文提到的阿尔法模型、风险模型和交易成本模型作为投资组合构建模型的输入,最终被转化为输出,得到目标投资组合,通常是理想的头寸以及各个头寸的规模。

    量化投资组合模型主要分为两大类,即基于规则的模型和基于优化的模型。

    基于规则的投资组合构建模型主要依赖于宽客的直觉。这些直觉通常是根据经验得到的规律,比如实验结果或犯错误得到的教训等。

    基于优化的投资组合构建模型则是使用算法去寻找宽客所定义目标函数(objective function)的最优路径。

     

    5.1 基于规则的投资组合构建模型

    常见的基于规则的投资组合构建模型有四类,即相等头寸加权、相等风险加权、阿尔法驱动型加权决策树加权。前两类模型的核心理念是等权重。阿尔法驱动型加权主要依赖阿尔法模型来进行头寸规模选择和投资组合构建。决策树方法,主要是以某种顺序使用一系列规则来决定头寸规模。

    相等头寸加权模型认为,对不同的头寸加以区分(给予不同权重)可能会具有两种负面结果,最终会超过非等权重加权所带来的好处。非等权重方法的第一个问题是,它总是默认模型具有统计学意义上的能力和功效,对头寸方向、波动幅度和其他预测值进行准确的预测。相反地,等权重方法认为,只有在方向性预测上才可以充分信任阿尔法模型。非等权重方法的第二个问题是,它一般倾向于在“最好”的几个预测头寸上进行大的投注,而在其他预测上投注很少。这种权重的差异会使策略在看似很有吸引力的头寸上承担一些例外事件的风险。

    相等风险加权方法依据头寸的波动性(或者风险的其他度量指标)来反向调整头寸规模。波动性越大,分配的权重就越小;反之越大。

    阿尔法模型可以决定头寸可能具有的吸引力,这个信号是合理决定头寸规模的最佳途径。宽客也会使用风险模型来给出单个头寸的最大规模上限,然后利用信号强度来决定实际头寸与头寸的最大可能值的接近程度。类似于在曲线上进行评级,得分最高的获得最大的头寸规模,次高的获得次之的规模。

    最后,无论使用基于规则的哪一种模型,都可以综合使用阿尔法模型、风险模型交易成本模型。例如,在相等权重模型中,根据交易成本模型,某些产品的交易成本过高而无法进行交易,所以需要对相等权重加以限制。

     

    5.2 基于优化的投资组合构建模型

    投资组合优化工具主要是基于资产管理行业的经典理论,即现代投资组合理论(modern portofolio theory, MPT)的基本原理。优化工具通过算法在各种可行的产品组合中进行定向搜索,以实现目标函数的最优化。

    均值方差优化技术(mean variance optimization)是基于MPT构建投资组合的一种常用方法。均值和方差是传向优化器的两个输入变量,输出变量则是在各个风险水平上具有最高收益的一系列投资组合。这里的均值是指进行评估的各种资产的平均期望收益,方差是对各种资产期望风险的度量。优化器的第三个输入变量是这些资产的期望相关系数矩阵(expected correlation matrix)。

     

    5.2.1 优化工具的输入变量

    正如上文所提到的,优化工具所需的输入变量有期望收益、期望波动率以及各种备选产品间的相关系数矩阵

    宽客倾向于使用阿尔法模型得到期望收益。阿尔法模型的输出变量通常包含预期收益或者预期波动方向。方向性预测也可以看作对收益的预测,相当于预测时认为所有的正收益都相等。

    使用历史数据计算出的实际波动率常被用来作为优化工具的输入变量。当然也有人使用对波动率的预测值。对波动率最常见的预测方法是使用随机波动模型。

    优化工具的第三个输入变量是相关系数矩阵。相关系数为1表示两个产品完全类似,-1表示完全相反,0表示完全不相关。产品间的相关性是由多种动态因素共同决定的,因而产品间关系的度量随着时间可能会很不稳定。

     

    5.2.2 优化技术

    常用的优化技术包括无约束条件的优化方法、带约束条件的优化方法、布莱克-李特曼优化方法、格里诺德-卡恩方法、重新取样效率以及基于数据挖掘的最优化方法

    带约束条件的优化方法通过在优化过程中添加约束条件和惩罚项来得到更加合理的结果。常见的约束包括头寸规模限制、对产品组的头寸限制,以及风险模型和交易成本模型的集成等。为了实现优化目标,需要设计数学公式和编程,通过迭代求解寻找最优解。此过程中需要注意两种情形,一种是由于约束条件太多而导致最优解不存在,另一种则是算法在找到一个局部最优解后就停止搜索,而导致找不到全局最优解。

    布莱克-李特曼优化方法解决了优化工具的输入变量带有测量误差的一些相关问题。这个算法在1992年发表于《金融分析师杂志》。

    格里诺德-卡恩方法在《主动投资组合管理》一书中提出,与绝大部分优化方法试图确定头寸规模不同,该方法的直接目的就是建立信号的组合。其主要思想是建立因素投资组合群。

    重新取样效率(resampled efficiency)相关方法解决了针对估计误差的过度敏感性问题。蒙特卡罗模拟(Monte Carlo simulation)是对数据进行重新取样的重要方法之一。

    最后,一些宽客使用机器学习方法,如监督学习或遗传算法来解决优化问题。这些被认为是基于数据挖掘的一类最优化方法。

     

    6. 执行模型

    执行一个交易有两种基本途径:电子途径或人为中介(如经纪商)。电子化交易通过直接市场准入得以实现,交易者可以通过经纪公司的基础设施和交易接口在电子市场直接进行交易。

    执行算法(execution algorithms)包括完成订单的逻辑结构,含有如何将大订单拆分成小订单的说明,以及应对限价指令簿和价格变化的各种措施。获得执行算法有三种途径:创建算法、使用经纪商的算法、从第三方软件厂商处获得。

     

    6.1 订单执行算法

    订单执行算法的主要目的是,以尽可能低的价格,尽可能完整地完成想要交易的订单。由于最优投资组合是通过投资组合构建模型筛选出来的,如果交易不能完全被执行,相当于持有一个和计划完全不同的投资组合。因此完整性很重要。

    度量执行算法的效率涉及到两个重要概念:一个是中间市场价格(mid-market),反映的是对某一产品最佳买入价和最佳卖出价的均值。这是判断交易价格是否公平最为标准的方法。另一个是交易量加权平均价格(volume-weighted average price, VWAP),用以衡量进行多笔交易时执行算法的质量。

    订单执行算法主要从以下几个方面进行考虑:是否要采用进取订单或被动订单、采用何种类型的订单、如何决定最佳订单规模以及将订单发送到何处

     

    6.1.1 进取订单和被动订单

    执行订单有两种基本方法,进取型或被动型。大多数市场订单是进取型的。

    进取订单投放进入市场,一般无附加条件。在合理范围内,只要订单簿上存在买入或卖出订单,就可以和对应方交易。进取订单可以被拆分也可以整体成交。交易价格为执行订单时最优惠的市场价格

    被动订单是一种限价订单,允许交易者控制其意愿进行交易的最坏价格。但是交易者提交的被动订单可能根本不会被执行,或者只有一部分会被执行。

    进入交易市场的每一张订单都会给出先后顺序。最高的优先级给予具有最佳价格的订单(对买单而言是最高买入价,对卖单而言是最低卖出价),次之的优先级分给价格差一点的订单。在大部分交易所,如果两个交易者报价相同,明订单交易者的优先级要高于暗订单交易者(暗订单可以向其他市场参与者隐藏自身订单信息)。对于至此仍然无法区分优先级的交易者,通常会按时间优先原则,让先提交的订单优先成交。

    有一些市场并不按照时间优先原则,而是对价格相同的所有订单给予同样的优先级,根据进取订单的量按比例进行分配。这可能会导致两种不良后果:规模虚大交易过量。一些交易者会故意加大其限价订单的规模,以求获得更大的进取订单份额,但是也可能会导致成交头寸超过交易者希望成交的被动订单的规模。另一方面,如果交易者设置订单规模过小,由于每次分配的份额很小,就必须建立和取消很多个订单。

    一般来说,动量型的阿尔法策略会和进取型的执行策略配对使用,而均值回复策略倾向于更加被动的执行策略。同时,信号强度和模型关于信号的置信度也是影响订单执行策略的一个考虑因素。相对于较弱的、不太确定的信号,比较强烈的、具有更多确定性的信号适合以更加积极的策略来执行。

     

    6.1.2 其他订单类型

    其他有意思的订单类型包括收盘市价订单(market-on-close orders)、停止限价订单(stop-limit orders)、立即全部执行或撤销订单(fill-or-kill orders)、全部成交或不交易订单(all-or-none orders)、取消前有效订单(good-till-canceled)、扫架订单(intermarket sweep orders, ISO)等。

     

    6.1.3 大订单和小订单

    从交易成本模型可以知道,相对于小订单,大订单的交易成本会以更高的比例上涨。因此,在交易大订单时常用的方法是拆分为多个小订单,在某个时间窗内分别进行交易。

    拆分后的订单规模取决于根据交易成本模型估计出的所关注的金融产品各种规模订单的交易成本。每个订单规模的大小取决于对订单进取程度的判断。

     

    6.1.4 何处下单

    在一些市场上,对同一种金融产品可能有不同的流动性分池。在当前形势下最好选择哪个流动性分池去下单是智能下单方法(smart order routing)的研究内容之一。

    另一方面,交易平台也可以分为明交易平台和暗交易平台。明交易平台的市场参与者可以通过限价指令簿看到其他参与者订单的价格及规模等信息。暗平台则不提供这些信息,从而为大订单的执行者提供了便利。

     

    6.2 交易基础设施

    交易基础设施包括宽客在实时交易策略过程中使用到的硬件和软件。绝大部分情况下,宽客必须决定是自己建立还是购买各种基础设施。

     

    Reference:

    《打开量化投资的黑箱》,Rishi K. Narang

    展开全文
  • 软件环境 **建模:**3DMax 2016 **场景:**MapGIS 10.3(x86) ...1.2 构建模型 自己对3DMax的是一窍不通,所以简单构建了一个仓库,并添加了纹理。 1.3 导出模型 MapGIS的三维场景,支持导入外部模型。常用的有.3ds ...

    软件环境

    建模:3DMax 2016
    场景:MapGIS 10.3(x86)

    1 使用3DMax建模

    1.1 根据场景修改单位

    因为我的场景是通过DEM构建的,建造仓库之类的模型,所以显示单位系统单位均使用
    在这里插入图片描述

    1.2 构建模型

    自己对3DMax的是一窍不通,所以简单构建了一个仓库,并添加了纹理。
    在这里插入图片描述

    1.3 导出模型

    MapGIS的三维场景,支持导入外部模型。常用的有.3ds 和 .obj 两种格式。但是MapGIS导入.3ds格式的模型总是出现问题,所以我使用obj格式作为导出的模型格式。

    ————打开3DMax——导出
    在这里插入图片描述————选择格式为obj
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    2 MapGIS加载obj模型

    2.1 打开配置好的三维场景

    在这里插入图片描述

    2.2 导入外部模型

    在这里插入图片描述在这里插入图片描述

    展开全文
  • pytorch构建模型三种方法

    千次阅读 2019-05-24 17:11:20
    2、构建模型的四种方法 2.1 第一种方法 import torch.nn as nn #Method 1 ------------------------------------------------------------------------------ class LinearRegression(nn.Mo...

    1、首先导入共用的包

    import torch.nn as nn

    2、构建模型的四种方法

    2.1 第一种方法

    import torch.nn as nn
    #Method 1 ------------------------------------------------------------------------------
    class LinearRegression(nn.Module):
        def __init__(self):
            super(LinearRegression, self).__init__()#以上固定
            self.linear = nn.Linear(1, 1)  #输入和输出的维度都是1
        def forward(self, x):
            x=self.linear(x)
            return x
    model1=LinearRegression()
    print(model1)
    
    LinearRegression(
      (linear): Linear(in_features=1, out_features=1, bias=True)
    )

    这种方法比较常用,早期的教程通常就是使用这种方法。

    2.2 第二种方法

    import torch.nn as nn
    #Method2 ---------------------------------------------------------------------------------
    class LinearRegression(nn.Module):
        def __init__(self):
            super(LinearRegression,self).__init__()
            self.dense=nn.Sequential(
                nn.Linear(1,1)
            )
        def forward(self, x):
            x=nn.Linear(x)
    print("Method 2:")
    model2=LinearRegression()
    print(model2)
    LinearRegression(
      (dense): Sequential(
        (0): Linear(in_features=1, out_features=1, bias=True)
      )
    )

    这种方法利用torch.nn.Sequential()容器进行快速搭建,模型的各层被顺序添加到容器中。缺点是每层的编号是默认的阿拉伯数字,不易区分

    2.3 第三种方法

    import torch.nn as nn
    class LinearRegression(nn.Module):
        def __init__(self):
            super(LinearRegression,self).__init__()
            self.dense=nn.Sequential()
            self.dense.add_module("dense1",nn.Linear(1,1))
        def forward(self, x):
            x=nn.Linear(x)
            return x
    model3=LinearRegression()
    print(model3)
    
    
    LinearRegression(
      (dense): Sequential(
        (dense1): Linear(in_features=1, out_features=1, bias=True)
      )
    )

    这种方法是对第二种方法的改进:通过add_module()添加每一层,并且为每一层增加了一个单独的名字。

     

     

    展开全文
  • 本次实验提供了一个花卉图像分类应用的样例,帮助您快速熟悉使用ModelArts预置算法构建模型的过程。 此样例针对预置的花卉图像数据集,对已有图像数据进行标注,然后使用预置的“ResNet_v1_50”算法对数据进行训练...
  • 第三章 使用距离向量构建模型 作者:Trent Hauck 译者:飞龙 协议:CC BY-NC-SA 4.0 这一章中,我们会涉及到聚类。聚类通常和非监督技巧组合到一起。这些技巧假设我们不知道结果变量。这会使结果模糊,以及...
  • keras搭建卷积神经网络构建模型参数个数计算方式 计算过程 (1)用一十二个333的卷积核对三通道图像1501503进行卷积。每一个卷积核有一个偏置。则此层参数个数为(333+1)12=336。 (2)经过上面的操作,生成了一...
  • Python----数据分析-使用scikit-learn构建模型实训(wine数据集、wine_quality数据) 目录: 实训1 使用 sklearn处理wine和wine_quality数据集 实训2 构建基于wine数据集的k- Means聚类模型 实训3 构建基于wine数据...
  • 2、构建并评价聚类模型 3、构建并评价分类模型 4、构建并评价回归模型 将数据集划分为训练集和测试集,使用sklearn转换器进行数据预处理与降维,使用sklearn估计器构建聚类模型,cluster提供的聚类算法及其适用范围...
  • import keras from keras.datasets import cifar10 (train_x, train_y) , (test_x, test_y) = cifar10.load_data() print(train_x.shape) # ndarray 类型: (50000, 32, 32, 3) print(train_y.shape) # (50000, 1)
  • 《Python数据分析与应用》第6章 使用 scikit-learn 构建模型 实训部分 【 黄红梅、张良均主编 中国工信出版集团和人民邮电出版社】 本博客题目文字主要来自: 印象笔记OCR文字识别转换(敲题目是不可能去敲题目的) ...
  • 《Python数据分析与应用》第6章使用sklearn构建模型,侵请删 相关网站链接 一、P174 任务一:使用sklearn实现数据处理和降维 1、读取sklearn中自带的波士顿数据集 2、用train_test_split()划分数据集 3、标准差标准...
  • 目录 0. 前言 1. 学习率衰减 2. 调参策略 3. 贪心监督预训练 4. 贪心逐层无监督预训练 ...如果这篇文章对你有一点小小的帮助,请给个关注...花书+吴恩达深度学习(二十)构建模型策略(超参数调试、监督预训...
  • 模型树------构建模型

    千次阅读 2016-03-13 17:11:01
    上一节我们讨论了回归树,今天我们来讨论模型树,回归树的叶子节点是数值,模型树的叶子节点是线性函数,这里需要将上一节的函数稍加修改即可,上一节中的叶子节点生成函数、错误率函数需要进行稍加修改。...
  • 5 PyTorch构建模型的三种方式

    千次阅读 2020-02-15 19:11:52
    5.1.1 构建模型 还记得第四章我们是如何建立线性模型的吗,我们写了一个函数: def model ( x , w , b ) : return w * x + b 现在我们用nn.Linear去代替这个自己撰写函数 import torch . nn as...
  • x2 = shared_model(input_2)#下面解释了为什么采用该形式能将input_2输入计算图模型,并返回计算结果。 ##Model继承于Container,Container继承于Layer,但Mode和Container均没有__call__,而Layer类的__call__函数...
  • pytorch搭建模型整体上看主要有两种方式,一种是继承torch.nn.Module类,另一种就是直接使用继承自该类的子类:Sequential ,ModuleList,ModuleDict。 一、继承torch.nn.Module类 Module类是nn模块里提供的一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,961
精华内容 21,984
关键字:

构建模型