iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1

文章說明

文章分段

  1. 文章說明
  2. deeplab的簡單介紹、於我的意義
  3. tensorflow的程式碼特色
  4. 再次說明訓練流程,model部分分成backbone(extractor)與model
  5. 逛deeplab的github程式,順序:train.py model.py datasets/data_generator.py …

上一章說到我之前對deeplab的理解,還有我對他的印象,我後來又再去看了Github的頁面,他有新的Auto-Deeplab的backbone(feature extractor)出現,詳情我還沒有看,但照他的敘述的是,這個backbone是用neural architecture search的方式找來的,是專門為segmentation task尋找到的架構,看來要找時間去研究了!

tensorflow的程式碼特色

在講訓練流程之前,想先講說其實tensorflow底下研究的project的程式對於初學者來說,真的很難看懂,為了看懂他們的程式,我使用了最笨的辦法,開一個空的資料夾,從無到有照著打出程式,並且邊打邊執行看看。用這樣的方式,我終於搞懂他們到底在寫什麼,至於他們在寫什麼,我現在就來稍微說說。

tensorflow面對大眾開放的程式碼,基於此框架本身的優勢:性能(可以轉為C++程式)、移動性...,他們會寫一堆無關他們論文提出的中心思想架構的程式碼,為的就是要讓程式碼具有彈性以及可使用性,所以呢,與其使用tensorflow/deeplab整包的程式碼進行訓練,然後不知其所以然,想要具體了解他怎麼做的情況下,只要照個從無到有的方式,一個個去試驗、查詢method的用處,自然而然的就會理解程式碼大概的邏輯。

另外,除了許多為了性能所撰寫的程式,tensorflow他們團隊自己在寫程式,搭建模型的時候,用的API是tf.slim,是一個目前沒有官方教學的模塊,變成說必須要自己搞懂tf.slim的運作模式,才能看懂他們是如何搭建模型的,尤其是backbone的部分,絕對是用tf.slim的方式搭建而成的。

所以要看懂tensorflow的程式碼,1要懂得把掌管性能,像是使用多個Gpu的程式碼去掉,2要懂得tf.slim那個scope到底是在說什麼。

2的部分,其實只要有寫c++,然後對於雙冒號::什麼時候需要加,什麼時候不需要加有概念,其實再回頭來看tensorflow的scope,就會輕鬆很多。

我們在搭建神經網路的時候,會有好多個神經層,每個都應該要有專屬的名字才能正確運作,就算像keras這類API不需要填寫名字就能跑的API,在用summary()的時候,一定也會看到各個層數自動用數字編號命名,像這種沒有經過自行定義名稱編排的網路,在jupyter這類的編輯器裡面,重複run模型,就會發現名稱的數字一直不停的增長上去,那是因為在同個未關閉的session內,每個神經層都一定要有自己的名稱的關係。

舉個例子,現在要為1千萬人命名,名字不可重複,且要能根據某些規則找到特定的人

像以上的例子,就是需要有方便的命名方式,為這些人命名才能讓我們在操作網路時,能夠更快速又方便。


上一篇
二、教你怎麼看source code,找到核心程式碼(e.g. DeepLab)
下一篇
二、教你怎麼看source code,找到核心程式碼 ep.3:訓練流程的細節
系列文
從零.4開始我的深度學習之旅:從 用tf.data處理資料 到 用tf.estimator或tf.keras 訓練模型30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
soft_soft
iT邦新手 5 級 ‧ 2020-09-24 19:34:00

加油加油/images/emoticon/emoticon08.gif

我要留言

立即登入留言