首頁>Club>
4
回覆列表
  • 1 # 使用者1149970488718

    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

  • 中秋節和大豐收的關聯?
  • 從星沙汽車站到瀏陽河路口怎麼坐公交車,最快需要多久?