darknet 中最重要的三個struct定義是 network_state, network, layer; 新版本network_state 已經併入到 network 裡去了。
程式碼可以先忽略 gpu 部分,不同種類的網路層都是透過 layer 裡面的函式指標 forward backward 和 update 定義本種類的執行規則。如 connected layer 就有 forward_connected_layer backward_connected_layer update_connected_layer 三個方法,gru layer 等也是一樣;
原子運算只在 blas.c 和 gemm.c 裡,網路的運算在 network.c 中,最重要的是 train_network_datum ,train_networks, train_network_batch 和 network_predict;
train_network_datum 是輸入資料用 float_pair , 就是 float *x , float *y 結對;
train_networks 是在 network_kernel.cu 裡,以併發執行緒方式進行訓練,引數是 data ;
有一點, darknet 在CPU模式下是單執行緒的,在多塊GPU顯示卡模式下,train_networks支援多卡執行,而且這裡也是改造成分散式多主機darknet執行的入口,可以看到訓練出的權重資料合併和scale。
train_network_datum 順序執行 forward_network { 逐層正向網路 } backward_network { 逐層逆向網路 },滿足次數下(*net.seen %subdivisions)執行一次 update_network( ,,, rate, momentum, decay);
對於使用者定義的網路引數檔案處理在 parse_network_cfg, 讀入訓練結果透過 load_weights
主幹就是這些了。
如果需要處理特別需求的資料來源,需要參考 data.c 入手。
對 cfg 配置檔案,重點調整(當然是全部引數都很重要,可能都要調整),訓練時調整重點的全域性引數: decay momentum learning_rate 這三個是與收斂速度有關的。policy 是weights 策略的, inputs batch(及相關的subdivisions) ouputs 是與資料吞吐維度相關的,最新版本好像ouputs這裡有改正。
======================= 2019.10.08 ======================
最近發現pjreddie 支援 opencv4 了, 而且找到了一篇關於深度學習框架最佳化的論文,放個自己傳到 github 上論文的連結:
Moore123/HParknet
darknet 中最重要的三個struct定義是 network_state, network, layer; 新版本network_state 已經併入到 network 裡去了。
程式碼可以先忽略 gpu 部分,不同種類的網路層都是透過 layer 裡面的函式指標 forward backward 和 update 定義本種類的執行規則。如 connected layer 就有 forward_connected_layer backward_connected_layer update_connected_layer 三個方法,gru layer 等也是一樣;
原子運算只在 blas.c 和 gemm.c 裡,網路的運算在 network.c 中,最重要的是 train_network_datum ,train_networks, train_network_batch 和 network_predict;
train_network_datum 是輸入資料用 float_pair , 就是 float *x , float *y 結對;
train_networks 是在 network_kernel.cu 裡,以併發執行緒方式進行訓練,引數是 data ;
有一點, darknet 在CPU模式下是單執行緒的,在多塊GPU顯示卡模式下,train_networks支援多卡執行,而且這裡也是改造成分散式多主機darknet執行的入口,可以看到訓練出的權重資料合併和scale。
train_network_datum 順序執行 forward_network { 逐層正向網路 } backward_network { 逐層逆向網路 },滿足次數下(*net.seen %subdivisions)執行一次 update_network( ,,, rate, momentum, decay);
對於使用者定義的網路引數檔案處理在 parse_network_cfg, 讀入訓練結果透過 load_weights
主幹就是這些了。
如果需要處理特別需求的資料來源,需要參考 data.c 入手。
對 cfg 配置檔案,重點調整(當然是全部引數都很重要,可能都要調整),訓練時調整重點的全域性引數: decay momentum learning_rate 這三個是與收斂速度有關的。policy 是weights 策略的, inputs batch(及相關的subdivisions) ouputs 是與資料吞吐維度相關的,最新版本好像ouputs這裡有改正。
======================= 2019.10.08 ======================
最近發現pjreddie 支援 opencv4 了, 而且找到了一篇關於深度學習框架最佳化的論文,放個自己傳到 github 上論文的連結:
Moore123/HParknet