• 根据任务,构建ComputationRequst
  • 编译ComputationRequst,获取NnetComputation

    std::shared_ptr<const NnetComputation> computation = compiler_.Compile(request);

    • 创建计算——CreateComputation

      compiler.CreateComputation(opts, computation);

      • 从输出节点开始逐步向前计算依赖关系

        ComputationGraphBuilder builder(nnet_, &graph_);

        builder.Compute(*(requests_[segment]));

        每次向前深入一层,并计算所有Cindexes的依赖关系

        BuildGraphOneIter();

        对其中的每个Cindex,若需要计算其依赖:

        AddDependencies(cindex_id);

        • 若为kDescriptor,desc.GetDependencies(index, &input_cindexes);
        • 若为kComponent,component->GetInputIndexes(request_->misc_info, index, &input_indexes);
        • 若为kDimRange,input_cindexes[0] = Cindex(node.u.node_index, index);
        • 若为kInput,不需要依赖
      • 检查是否所有的输出都是可计算的

        if (!builder.AllOutputsAreComputable())

      • 将数据与运算组织为计算步

        对每个chunk中Cindexes根据不同网络层切分为phases,并以chunk为单位进行处理

        steps_computer.ComputeForSegment(*(requests_[segment]),phases_per_segment[segment]);

        将phases以节点为单位切分为sub-phases,并以sub-phases为单位进行处理

        ProcessSubPhase(request, sub_phases[j]);

        若sub-phases对于节点类型为:

        component-node:ProcessComponentStep(sub_phase);

        kSimpleComponent:除索引数-1外,将step复制为input_step

        else:从graph_->dependencies[c]获取依赖并插入到input_step中

        input-node:ProcessInputOrOutputStep(request, false, sub_phase);

        output-node:ProcessInputOrOutputStep(request, true, sub_phase);

        dim-range-node:ProcessDimRangeSubPhase(sub_phase);

    • 优化计算——Optimize

      Optimize(opt_config_, nnet_,

      MaxOutputTimeInRequest(request),

      computation);

  • 根据NnetComputation构建NnetComputer

    NnetComputer computer(opts_.compute_config, *computation,

    nnet_, nnet_to_update);

  • 运行NnetComputer

    computer.Run();

    对NnetComputation中所有Command迭代地运行

    ExecuteCommand();

    kPropagate:void *memo = component->Propagate(indexes, input, &output);

    kBackprop:component->Backprop(debug_str.str(), indexes,

    in_value, out_value, out_deriv,

    memo, upd_component,

    c.arg6 == 0 ? NULL : &in_deriv);

    ...

  • 从NnetComputer获取输出

    computer.GetOutputDestructive("output", &cu_output);

Kaldi nnet3的前向计算的更多相关文章

  1. Faster-rnnlm代码分析3 - EvaluateLM(前向计算ForwardPropagate)

    先采用一个简单的输入文本做测试 [root@cq01-forum-rstree01.cq01.baidu.com rnnlm]# pwd /home/users/chenghuige/rsc/app/ ...

  2. Xvector in Kaldi nnet3

    Xvector nnet Training of Xvector nnet Xvector nnet in Kaldi     Statistics Extraction Layer in Kaldi ...

  3. BP原理 - 前向计算与反向传播实例

    Outline 前向计算 反向传播 很多事情不是需要聪明一点,而是需要耐心一点,踏下心来认真看真的很简单的. 假设有这样一个网络层: 第一层是输入层,包含两个神经元i1 i2和截距b1: 第二层是隐含 ...

  4. [源码解析] PyTorch 流水线并行实现 (4)--前向计算

    [源码解析] PyTorch 流水线并行实现 (4)--前向计算 目录 [源码解析] PyTorch 流水线并行实现 (4)--前向计算 0x00 摘要 0x01 论文 1.1 引论 1.1.1 数据 ...

  5. Kaldi nnet3的fastlstm与标准LSTM

    标准LSTM:             与标准LSTM相比,Kaldi的fastlstm对相同或类似的矩阵运算进行了合并.     # Component specific to 'projected ...

  6. 关于入门深度学习mnist数据集前向计算的记录

    import osimport lr as lrimport tensorflow as tffrom pyspark.sql.functions import stddevfrom tensorfl ...

  7. [图解tensorflow源码] MatMul 矩阵乘积运算 (前向计算,反向梯度计算)

  8. [tensorflow源码分析] Conv2d卷积运算 (前向计算,反向梯度计算)

  9. 对Kaldi nnet3进行奇异值分解(SVD)以减小模型大小

    用处 基于SVD实现模型压缩以适配低功耗平台     根据nnet3bin/nnet3-copy,nnet3-copy或nnet3-am-copy的"--edits-config" ...

随机推荐

  1. Maven pom.xml中的元素modules、parent、properties以及import

    前言 项目中用到了maven,而且用到的内容不像利用maven/eclipse搭建ssm(spring+spring mvc+mybatis)用的那么简单:maven的核心是pom.xml,那么我就它 ...

  2. R语言学习——矩阵

    > #矩阵是一个二维数组,每个元素都拥有相同的模式(数值型.字符型或者逻辑型).通过matrix()创建,一般使用格式为:mymatrix<-matrix(vector,nrow=numb ...

  3. Clion 配置

    plugins: one dark theme font : fira code retina

  4. JavaScript代码组织结构良好的5个特点

    JavaScript代码组织结构良好的5个特点,随着JavaScript项目的成长,如果你不小心处理的话,他们往往会变得难以管理.我们发现自己常常陷入的一些问题: 当在创建新的页面时发现,很难重用或测 ...

  5. 洛谷 P1439 【模板】最长公共子序列

    \[传送门啦\] 题目描述 给出\(1-n\)的两个排列\(P1\)和\(P2\),求它们的最长公共子序列. 输入输出格式 输入格式: 第一行是一个数\(n\), 接下来两行,每行为\(n\)个数,为 ...

  6. Swagger 配置

    放行 , 不拦截. @Configuration open class MyWebMvcConfig : WebMvcConfigurationSupport() { override fun add ...

  7. Linux下redis的安装及配置

    1.去官网下载redis(redis.io) 2.将其解压到根目录下 3.进入解压的目录,然后编译源程序, 如果不是root账户登录的,命令前面需要加sudo make make install PR ...

  8. MyBatis的接口式编程Demo

    很久没细看过MyBatis了,时间一长就容易忘记. 下面是一个接口式编程的例子. 这里的例子一共分为4步: 1 首先要有一个namespace为接口的全类名的映射文件,该例中是 IMyUser.xml ...

  9. Java instanceof运算符

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. 用法: res ...

  10. 安装 Power BI 报表服务器

    开始之前 建议在安装 Power BI 报表服务器之前先查看安装 Power BI 报表服务器所要满足的硬件和软件要求. Power BI 报表服务器产品密钥 Power BI Premium 如果已 ...