天天看点

深度学习框架 源码阅读 调试 分析 c++ tiny-dnn (2) - 以sinus_fit为例子

tiny-dnn

作图

tiny-dnn–sinus_fit 正弦函数拟合

深度学习框架 源码阅读 调试 分析 c++ tiny-dnn (2) - 以sinus_fit为例子

调试预准备

  • 去掉并行选项, 使用单线程, 这样可以看到完整的调用栈
  • 熟悉 intel的 高级向量扩展指令集: Advanced Vector Extensions,简称AVX
  • 对代码做一些修改,方便调试,具体见分支 prgrmz/dev
prgrmz/dev
  • 以回归问题sinus_fit.cpp为例子
sinus_fit : 拟合正弦函数

名称解释

bwd_*

  • bwd: barkward的缩写
  • bwd_in_data:
在网络中,从后往前看,当看某层时,该层的输入数据 叫 bwd_in_data

常见…

基本是以层layer为话语对象 , 来写的代码

比如 layer.h :: tiny_dnn::layer 的子类 fully_connected_layer.h 全连接层
  • fwd_in_data_, fwd_out_data_
在该网络中,从前向后依次经过各层,喂给当前层的输入叫做 fwd_in_data_,当前层吐出的输出叫 fwd_out_data_
  • bwd_in_data_, bwd_out_data_
在该网络中,从后向前依次经过各层,喂给当前层的输入叫做 bwd_in_data_,当前层吐出的输出叫 bwd_out_data_
  • 注意,fwd_in_, bwd_in_, fwd_out_, bwd_out_ 中的 in都是左边的,out都是右边的。 in、out的含义有这种一致性。
  • 但实际上 向量 fwd_in_data_ , bwd_in_data_ 中有三个元素, 依次是 data、weight、bias

可见 , fwd_in_data_ , bwd_in_data_ 实际上 既是 喂给 当前层 的输入数据,又包含了 当前层自身的权重。

即 fwd_in_data_ , bwd_in_data_ 实际上 名不副实,应该是为了代码写起来方便。

  • in_type_, out_type_

in_type_ : 表示 fwd_in_data_ , bwd_in_data_ 中个元素的类型, 即 data、weight、bias

out_type_ : 表示 fwd_out_data_ , bwd_out_data_ 中元素的类型, 即 data

  • fwd_ctx_, bwd_ctx_

fwd_ctx_.in_data_ : 是 fwd_in_data_的同义词,指向的是同一个对象

fwd_ctx_.out_data_ : 是 fwd_out_data_的同义词,指向的是同一个对象

bwd_ctx_.in_data_ : 是 bwd_in_data_的同义词,指向的是同一个对象

bwd_ctx_.out_data_ : 是 bwd_out_data_的同义词,指向的是同一个对象

继续阅读