天天看點

深度學習架構 源碼閱讀 調試 分析 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_的同義詞,指向的是同一個對象

繼續閱讀