【霏艺所思】AlphaGoZero开源实现代码讲解<3>:输入特征
【霏艺所思】AlphaGoZero开源实现代码讲解<1>:前向过程
【霏艺所思】AlphaGoZero开源实现代码讲解<2>:反向过程
【霏艺所思】AlphaGoZero开源实现代码讲解<3>:输入特征
【霏艺所思】AlphaGoZero开源实现代码讲解<4>:MCTS算法
【霏艺所思】AlphaGoZero开源实现代码讲解<5>:杂项
输入特征,仅是一个cc文件
src_cpp\elfgames\go\base\board_feature.cc
只需要看void BoardFeature::extractAGZ(float* features) const 方法就可以了
具体的以后再说~
【霏艺所思】AlphaGoZero开源实现代码讲解<2>:反向过程
【霏艺所思】AlphaGoZero开源实现代码讲解<3>:输入特征
【霏艺所思】AlphaGoZero开源实现代码讲解<4>:MCTS算法
【霏艺所思】AlphaGoZero开源实现代码讲解<5>:杂项
输入特征,仅是一个cc文件
src_cpp\elfgames\go\base\board_feature.cc
只需要看void BoardFeature::extractAGZ(float* features) const 方法就可以了
具体的以后再说~
1 个评论
https://youtu.be/dpMVLrdzhuY
聽説下雨天,音樂和代碼更配哦~
輸入特徵也很重要的好麽。。。
你們都不看。。。
都只看網絡結構,和訓練的loss函數,優化器,調參。。。
先介紹下輸入特徵的情況
前向過程:
原版AlphaGo的 輸入特徵函數 是 extractState
現在的 Zero版本 ,輸入特徵函數 是 extractStateAGZ
反向過程,訓練的時候
如果是原版 看函數 extractStateExt
如果是 zero版本 ,看 extractStateExtAGZ
--------------------------------------------------------
問題1:什麽時候會調用這4個函數呢?
前向過程:
src_cpp\elf\ai\tree_search\tree_search.h 【從MCTS 開始讀起】
MCTS樹搜索的時候會執行 actor.evaluate(locked_states, &resps);【actor是 MCTSActor】
内部代碼 執行了 ai_->act_batch(p_bfs, p_replies) 【ai_ 是 elf::ai::AIClientT<BoardFeature, GoReply>】
act_batch 内部代碼 執行了 client_->sendBatchWait(targets_, ptr_funcs_s);
也就是通知Python,這個時候會調用 Python的回調 函數
然後發現 參數列表 是 <BoardFeature, GoReply>
所以Python側代碼 會調用
src_cpp\elf\base\sharedmem.h
的 state2mem函數 datum->state_to_mem_funcs.transfer(idx, mem);
p.second(*anyp, msg_idx);
其中p.first 表示了類型 這裏就是 BoardFeature
所以 p.second 表示了 extractStateAGZ 【這裏用了 std::bind來封裝】
反向過程:
src_cpp\elfgames\go\train\game_train.cc
兩種情況,一種是從本地的json文件裏去讀取游戲歷史記錄
第二種是通過zmq收到數據去處理
先説第二種
收到 zmq的數據以後 ,調用 _state_ext[i]->fromRecord(*r);
得到了state數據,注意,這個時候,參數類型是 <GoStateExtOffline>
回到剛才的講解 ,所以 調用了 extractStateExtAGZ 了
BindStateToStateToMemFunc 這個函數給 函數綁了個入參
而 transfer綁的是出參
問題2:這4個函數内部實現講解?
src_cpp\elfgames\go\base\board_feature.cc
實現的void BoardFeature::extractAGZ(float* features) const
看看就好,明天繼續寫
聽説下雨天,音樂和代碼更配哦~
輸入特徵也很重要的好麽。。。
你們都不看。。。
都只看網絡結構,和訓練的loss函數,優化器,調參。。。
先介紹下輸入特徵的情況
前向過程:
原版AlphaGo的 輸入特徵函數 是 extractState
現在的 Zero版本 ,輸入特徵函數 是 extractStateAGZ
反向過程,訓練的時候
如果是原版 看函數 extractStateExt
如果是 zero版本 ,看 extractStateExtAGZ
--------------------------------------------------------
問題1:什麽時候會調用這4個函數呢?
前向過程:
src_cpp\elf\ai\tree_search\tree_search.h 【從MCTS 開始讀起】
MCTS樹搜索的時候會執行 actor.evaluate(locked_states, &resps);【actor是 MCTSActor】
内部代碼 執行了 ai_->act_batch(p_bfs, p_replies) 【ai_ 是 elf::ai::AIClientT<BoardFeature, GoReply>】
act_batch 内部代碼 執行了 client_->sendBatchWait(targets_, ptr_funcs_s);
也就是通知Python,這個時候會調用 Python的回調 函數
然後發現 參數列表 是 <BoardFeature, GoReply>
所以Python側代碼 會調用
src_cpp\elf\base\sharedmem.h
的 state2mem函數 datum->state_to_mem_funcs.transfer(idx, mem);
p.second(*anyp, msg_idx);
其中p.first 表示了類型 這裏就是 BoardFeature
所以 p.second 表示了 extractStateAGZ 【這裏用了 std::bind來封裝】
反向過程:
src_cpp\elfgames\go\train\game_train.cc
兩種情況,一種是從本地的json文件裏去讀取游戲歷史記錄
第二種是通過zmq收到數據去處理
先説第二種
收到 zmq的數據以後 ,調用 _state_ext[i]->fromRecord(*r);
得到了state數據,注意,這個時候,參數類型是 <GoStateExtOffline>
回到剛才的講解 ,所以 調用了 extractStateExtAGZ 了
BindStateToStateToMemFunc 這個函數給 函數綁了個入參
而 transfer綁的是出參
問題2:這4個函數内部實現講解?
src_cpp\elfgames\go\base\board_feature.cc
實現的void BoardFeature::extractAGZ(float* features) const
看看就好,明天繼續寫