YOLO V3 + Tensorflow V2 小筆記

去年我寫了一個專利, 到現在專利事務所還沒完成申請流程, 這樣我就不能公開啦! Anyway, 我來研究實作技巧吧.

首先, 我需要 YOLO V3. 前幾年研究的 Facenet 是用 Tensorflow 1.10, 現在上網一查, 人家已經用 Yolo V3 搭 Tensorflow V2 [1] 了. 首先需要 TF V2 [2]. 然後用上次的老招升級成 tensorflow-gpu

pip3 install --ignore-installed --upgrade tensorflow-gpu

此時遇到下面 error

distributed 1.21.8 requires msgpack, which is not installed.

用 pip3 install msgpack 解決.

接著在 Yolo V3 的安裝過程中, 需要多安裝 git for windows, 這可以參考 [3]. 至於 wget 在 Anaconda3/Lib 底下有.

一切搞定後, 進入 Anaconda3 的 TF2 (自己取的) 虛擬環境, 進行 Yolo v3 的訓練. 此時會報一個錯. 

File "C:\AI\Anaconda3\envs\TF2\tensorflow-yolov3\core\config.py", line 14, in <module>
from easydict import EasyDict as edict
ModuleNotFoundError: No module named 'easydict'

這時只要安裝 easydict 就好, 就可以堂堂跑 Yolo V3 了. 看樣子也真的有去找 GPU.

PS C:\AI\Anaconda3\envs\TF2\tensorflow-yolov3> python train.py
2020-03-04 23:31:09.283568: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
2020-03-04 23:31:10.297903: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1411] Found device 0 with properties:
name: GeForce GTX 1050 major: 6 minor: 1 memoryClockRate(GHz): 1.493
pciBusID: 0000:02:00.0
totalMemory: 2.00GiB freeMemory: 1.61GiB
2020-03-04 23:31:10.345495: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1490] Adding visible gpu devices: 0

接下來就是去洗澡, 看要多久才會 train 完. 可是, 六分鐘護一生之後, Python 把環境建好, 開始讀檔案要 training 時就出錯了. 原來是個豬頭 bug 把路徑名稱寫錯, 這題還研究了半天, 以至於學會了 os.path.normpath, os.path.join 的用法…

重新起跑後不久, 又遇到了 memory 不足的問題:

OP_REQUIRES failed at gpu_swapping_kernels.cc:72 : Resource exhausted: OOM when allocating tensor with shape[1024] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc

這算是老問題了. 我的 Notebook 只有 2GB GPU RAM, 普通的 Yolo V3 要 4GB DDR, 所以應該要用 tiny 版本的 Yolo 才有機會. 此時找到 [4] 這篇滿實用的, 介紹得很清楚, 每個 model 要用多少 GPU RAM. 雖然它是用 Darknet, 但也有豐富的連結到其他 framework. 因此下一篇我將轉往 CPU only 或 Yolo Tiny 的方法.

另外就是下次買 Graphic card 做 AI 實驗, 內建 GDDR 的大小的重要性遠勝過計算能力. 能夠有 4GB free 就可以, 因此最好是內建 6 GB 吧, 不然就是要兩張卡了. 兩張卡的用法可以參考 tensorflow 官網 [5].

ˋ[Note]

  1. https://github.com/YunYang1994/tensorflow-yolov3 
  2. https://medium.com/@shaolinkhoa/install-tensorflow-gpu-2-0-alpha-on-anaconda-for-windows-10-ubuntu-ced099010b21
  3. https://gitforwindows.org/
  4. https://gitee.com/suiyifan/darknet
  5. https://www.tensorflow.org/

我讀 «證券分析» 第六版 – 完結篇

本書有個第八部分, 標題叫做 “環球價值投資”. 事實上, 作者並沒有討論過怎麼投資海外的股票, 所以這個部分只有一篇導讀. 導讀寫得還不錯, 主要就是認為本書的觀點可以用在全世界的股票.

想要買海外的股票當然會遇到很多困難. 像是匯率風險、會計制度不同、股息被扣稅遲遲無法退稅、資訊不透明 (特別是未上市公司)、無法獲得投票權…等等不一而足. 但導讀人 Thomas Russo 舉了自身的例子給大家參考.

想投資韓國樂天糖果: Russo 問公司高層明年現金流的前景如何? 翻譯和高層講了 30 分鐘, 翻譯結果只有 “更好” 而已, 因此放棄不投資. 想投資荷蘭海尼根, 副主席很嚴肅地問他 “你在這裡幹什麼?” , 非常好奇為何美國人會想跑來投資. 想投資英國維多麥 (Weetabix), 買了16% 的股份, 還花了好幾年才能見到 CEO 一面. 上述兩家都是家族企業, 他們專注本業、注重回饋股東, 故 Russo 也想辦法讓自己能參與經營. 

最後本書有個附錄, 高達百餘頁 (P.823~924), 但我決定跳過. 這部分有被收錄在電子掃描檔, 故顯然大家公認它比第八部分更有料. 裡面的表格確實非常多, 我想可以視為個案分析的一個資料庫. 這個單元跳過不算的話, 我已經把整本書都摘錄完了. 若是有人說沒讀完附錄不算讀過 “證券分析”, 那我也只好投降輸一半了. 謝謝收看!

我讀 «證券分析» 第六版 – 市場分析與證券分析

昨晚 (2020/2/27) 道瓊指數大跌 1190 點, 寫下歷史紀錄. 這種大日子當然值得剪報留念.

然後讀點書來壓壓驚. 

第 52 章講市場分析與證券分析. 無疑地作者當然認為自己是證券分析師, 並且鼓勵大家做證券分析師. 假如我們認真地做市場分析, 而非主觀的臆測, 那麼市場分析有時能夠替代或是輔助證券分析. 畢竟 “掌握買賣時機或是選擇上漲最多、最快的股票的技巧, 顯然要比費力研究股票的內在價值帶來更豐厚的利潤 (p. 800).

市場分析可以分為兩類: 第一類只從股票市場的歷史表現中尋找資料來進行預測. 我想大家比較熟悉的講法叫做 “技術分析”, 本書中叫它做 “圖表法”. 第二類分析關注所有的經濟因素.

本書既然是價值投資的經典, 當然不可能大推技術分析. 因此 p. 802 講到:

  1. 圖表法不可能是一門科學.
  2. 並不存在一種可以保持長期預測準確性、同時又被眾人所知的圖表法. 只要大家都用某個方法, 它自然就會失效.
  3. 理論基礎有待商榷. 雖然我們可以精準分析過去, 但預測未來這件事未必能幫投資人賺錢. 雖然證券分析同樣是研究過去的數據, 但是證券分析強調用 “安全邊際” 來保障自己, 市場分析卻否認 (需要安全邊際) 這一點 (p.803).
  4. 技術分析中的停利停損會產生保護作用, 讓投資人不致損失太大並且獲得一些成果. 但頻繁進出、或是與大多數股民同進同出, 使得獲利進一步地受限.

第二類的市場分析法只看經濟數據, 例如以前看高爐 [1] 開工率、現在看用電量. 或是最近依然當紅的 “殖利率倒掛” 這些指標. 本書批評機械指標 (mechanical indices) 不夠科學的地方在於, 它只能定性預測, 不能定量預測. 例如股市會走低, 但是會多低、低多久? 如果不能提供對應的數據, 還不能算一門科學.

總結起來, 證券分析勝過市場分析:

  1. 證券分析有安全邊際, 市場分析只有對或是錯.
  2. 市場分析的停利停損增加交易成本. (當然現在有免傭金的證券公司, 這個問題就不存在).
  3. 市場分析是零和的鬥智遊戲. 只有幸運者能占其他人的便宜.

市場分析若要增加自己的勝率, 多少要做證券分析, 確保股價低於內在價值, 而不是預測股價會高於現值.


 

這一章的後半部 (P. 808~P.812) 開始轉換討論的重點, 不討論分析師採用哪種策略去分析, 而是討論投資人應該用哪種策略? 投資人可分為兩類: 有錢的跟沒錢的. 嗯, 資金多的跟資金少的.

A. 資金少的投資者, 又分成 3 類, 依據他們重視什麼而定:

  1. 收益型投資者: 適合買美債. 當然這是指美債利息很高的年代. 作者認為國債才能保證收益, 其他儲蓄商品、甚至是股票都不夠可靠.
  2. 利潤型投資者: 作者認為他們其實是想達到證券分析師想達到一樣的目標. 但叔叔才有練過, 因此書上建議投資人應該接受專業分析師的批評. (P. 809)
  3. 投機型投資者: 本書一貫認為, 購買股價低於內在價值的證券才是投資, 即使用過高的價錢買進 “成長型股票” 都算是投機 – 這已經算是比較有勝算的方式. 其他的投機行為包括創投、購買未上市、新上市、或者看起來上漲的股票都算. 這些的勝率都非常低, 需要非凡的聰明才智和運氣.

B. 資金較多的投資者, 顯然資金較多的投資者擁有明顯的優勢, 但也有三個劣勢, 前兩個我看不懂.

  1. 購買國債有數量限制. (P. 811)
  2. 通膨對他們的影響比較大.
  3. 只好投資在規模夠大的標的, 對發掘低調又優質小公司容易有偏見.

其實本書又花了一兩頁講企業和金融機構的投資. 對於企業而言, 本書依然建議買美國政府債券. 對金融機構, 作者說他不敢冒昧建議, 但是如果債券、優先股 (書上翻譯是: 高等級固定收益證券) 的收益對它們已經足夠的話, 他會建議就不要去買普通股的股票了. 如果認為這樣還是抵抗不了通膨, 可以用一部份的資金, 基於證券分析的標準和技巧去投資. 老實說, 這是極度保守的建議. 而且美國國債也早就不行了. 故坊間幾乎都不掃描這部分的英文原稿, 更別說翻譯了.

[Note]

1. 高爐