2019年10月12日 星期六

Keras MobileNet 版的圖片辨識遷移學習

這學期的 AI 課程改用 google colab。 因為它對 caffe 的支援不佳, 所以先前 用 caffe 做遷移學習的範例 不能拿來上課了。 還好搜尋到很棒的一篇教學文 Transfer Learning using Mobilenet and Keras 以及伴隨的 github 專案 ferhat00/Deep-Learning, 於是改寫一下重新上架成為: ckhung/keras-mobilenet。 圖像辨識的整個流程變得超級簡單!

先下載 ckhung/keras-mobilenet 及訓練資料集 dog_behaviors.zip, 再上傳到你的 google drive。 假設你已玩過 google colab, 那麼從 google drive 裡面打開 km-transfer.ipynb 應該就會自動進入 colab。 接下來就照著 km-transfer.ipynb 做囉!

google 圖片搜尋批次下載

google 圖片搜尋 「dog drinking」 玩機器學習時, 需要有大量的訓練資料。 以圖片辨識來說, google 圖片搜尋是最佳幫手。 但是要手動把搜尋結果一張一張存檔, 很累呀! 這時可以用 github 上 (有五、六千顆星) 的 google-images-download 來批次下載。

2019年9月7日 星期六

commento 幫任何靜態網頁加上留言/投票功能

想幫你的網站加上留言功能嗎? 熱門的 disqus 有一些隱私疑慮; 於是我搜尋到 commento。 比較簡單的方法是 到官網註冊付費使用。 點 「Try the Demo」、 在文字輸入框打幾個字、 (不必登入) 勾選 「comment anonymously」、 點 「add comment」, 你的留言就出現了。 管理員也可以設定禁止 (或審查過才准發表) 匿名留言。 至於投票, 當然一定要登入, 算是簡單版的防止灌票。 畢竟我是因為官網強調尊重隱私而被吸引過來的, 當然就選擇自己架囉。 以下安裝設定筆記分別在 Debian 9 及 lubuntu 18.04 執行。 自己架的版本只成功了 http 而沒有 https。

2019年9月2日 星期一

gmail 打包檔一片亂碼? 交給 hypermail 轉成 html

每年暑假例行的 gmail 打包下載, 抓回來解壓縮後的 *.mbox 檔都是一堆亂碼。 如果從頭到尾都是 base64 編碼的內容那也還容易處理 -- 就用 base64 -d 指令即可解碼。 最煩的是: 在 *.mbox 裡面, base64 編碼的內容混雜鑲嵌在正常 ascii 文字當中。 偶爾需要回頭找前幾年的信件, 就必須用 mutt -f abc.mbox 之類的方式, 把每個 *.mbox 逐一手動打開來檢查。 今年終於找到救星: hypermail。 原來過去十幾年來, W3C 一直拿它來做通信論壇歸檔管理。 因為太穩定了, 所以很久沒有更新了, 在 ubuntu 套件庫裡面找不到, 只好去 github 抓原始碼回來編譯。

2019年8月22日 星期四

暫時隱藏 android 手機相片資料夾

近日開始, 從香港入境中國, 會被檢查手機。 其實有兩個簡單的方法可以暫時隱藏手機相片資料夾。 這是 security by obscurity (which is no security!) 用白話講, 這是很弱的偽裝, 只夠對付忙碌的第一線檢查人員; 如果一開始就已被盯上、 已被列入特殊觀察名單, 那麼這兩招其實是無效的。

2019年8月19日 星期一

網頁表格轉 csv, 瀏覽器 inspector 手動剪貼版

玩資料視覺化, 經常需要從網頁上下載表格, 再轉成 csv。 以前就曾搜尋到 sebsauvage.net 上面的 html2csv.py, 後來忘記了; 最近又重新發現一次。 很簡單: python2 html2csv.py abc.html 它會把 abc.html 裡面的所有表格串在一起, 產生一個 abc.csv 。 如果有合併列或合併欄等等比較複雜的狀況, 還是需要後續處理, 但至少比自己寫 regexp 簡單多了。 全文完。

下載 html 檔 喂~ 這樣就結束? 這篇未免太 ㄌㄢˋ ㄩˊ ㄔㄨㄥ ㄕㄨˋ 了吧! [現在有同音異字的成語太多了, 我都不知道國字該怎麼寫才對...] 至少應該要交代一下如何取得 html 啊。 如果是大量的靜態網頁, 可以用 wget 或 lynx -dump 或 curl 取得。 有可能需要 設定 user agent 才不會被網站拒絕。 如果是 javascript 所動態產生的、 上述指令無法取得的網頁呢? 如果頁面數量很多, 那就考慮用 puppeteer。 如果只是單一或少數的 [js 動態產生的] 頁面, 那就手動另存新檔就好。 可是有一些 js 頁面需要你點幾個地方之後, 才會動態填值進表格。 這時 firefox 的 console 就很好用了 -- 即使不是 js 程式設計師也值得學一下。

2019年8月7日 星期三

尺規作圖遊樂場 Dr. Geo

過圓外一點 C 做切線 CE 跟 CF 還記得小時候學的 (沒有刻度的) 直尺與圓規作圖嗎? 光用這兩個工具, 就可以畫出相似三角形、 三角形的外接圓/內切圓等等圖形。 這是很燒腦又很好玩的益智遊戲。 用電腦畫更好玩, 因為繪圖完成後, 你可以用滑鼠抓著原圖的頂點或圓心, 改變原圖 (例如三角形) 的大小/形狀/位置的同時, 看著衍生圖 (例如外接圓或內切圓) 跟著變動, 超有成就感! 十幾年前我寫過 DrGeo: 物理老師也會心動的幾何教學玩具。 後來 Dr. Geo 大改版; 幾個月前得知: 新版的 Dr. Geo 不僅支援中文顯示, 也支援中文輸入, 今天終於要來重寫一篇新版的介紹文了。

2019年8月3日 星期六

簡單語音指令辨識

完整的自然語言語音辨識很複雜; 但在很多應用場合中, 如果可以讓用戶以十來個簡單語音指令控制電器/電腦/apps, 就已經很方便了, 而想要訓練這樣的類神經網路, 門檻當然比完整的語音辨識低很多。 Simple Audio Recognition (以下簡稱 SAR 一文) 所介紹的 tensorflow 原始碼當中的 speech_commands 範例, 就是這樣的工具。 餵一段一秒鐘的聲音, 它會判斷這是 "yes", "no", "up"、 "down"、 "left"、 "right"、 "on"、 "off"、 "stop"、 "go" 當中的哪一個語音命令, 或是未知的聲音 (UNKNOWN) 或是無聲 (SILENCE) (其實可能是很小聲的背景噪音)。 假設讀者已經先照著 貴哥的 colab 初學筆記 認識了 colab 的基本操作, 今天這篇文章將接續著帶大家用 colab 把 speech_commands 的操作流程幾乎走一遍。

2019年7月13日 星期六

貴哥的 colab 初學筆記

Google colaboratory 提供短暫 (數小時) 的免費雲端 GPU 算力, 真是深度學習初學者的福音啊! 前提是你要有 google drive 的帳號, 並且略會操作 Jupyter Notebook。 網路上已有很多入門教學文; 貴哥一看到有 shell 可用, 忍不住就好奇多探索一些, 於是也寫一篇自己的初學筆記。 基於 「站在巨人肩膀上」 的原則, 比較多人介紹的基本操作就只簡單帶過, 細節可參考 台大機械所 Wei-Hsiang Wang 的 Colab 基本操作筆記 (中文) 及 fuat 的 Google Colab Free GPU Tutorial (英文)

2019年7月9日 星期二

「Docker pull 卡住不動」 的實驗計畫

不太確定為什麼, 偶爾會遇到 docker pull 抓映像檔抓到一半突然卡住不動。 很多人都遇過相同的問題, 而且很多年了都沒有解決, 到現在 Bounty Source 還在懸賞。 我在電腦教室特別常遇到這個問題; 可惜上課期間來不及研究。 這篇的目的是希望下次再遇到時, 可以做一些實驗, 確認一下到底是伺服器那頭的問題, 還是我們這頭的問題。 如果夠多人測試不同的排列組合, 並且到上述 issue 回報自己的排列組合, 說不定對開發者除錯會有一些幫助。

以下提到設定檔的地方, 都以 lubuntu 18.04 bionic beaver 為準。

2019年6月27日 星期四

文字檔控用 SQL 語法肉博 csv

我是奉行 unix 哲學 的文字檔控。 用 grep 從 csv 檔撈資料的時候突然想到: 可不可以改用 SQL 指令來查詢 csv 檔呢? 果然搜尋到 qtextql 兩個專案。 而且後者直接用 apt install textql 安裝就可以用。 這工具除了讓 SQL 老手可以很方便地檢索 .csv 檔之外, 也很適合拿來當作 SQL 語法入門, 讓初學者可以 (省略無聊而繁瑣的建立資料庫步驟) 在十分鐘之內單刀直入從 (比較有趣的) SELECT 指令開始學起。

2019年6月5日 星期三

avfs: 不必解開, 直接把壓縮檔當成目錄大搖大擺走進去

我每年會備份一次個人檔案。 硬碟上有歷年的 .tgz 備份檔。 有時需要把舊文件挖出來看。 問題是: 不記得我要的檔案在哪一年份的備份裡。 於是逐年 [解壓縮、 搜尋、 刪掉] 直到找到為止, 有點麻煩。 今天終於發現一招好用的方案: 採用 AVFS。