2021年9月30日 星期四

用 Anydesk 連線遠端 Windows 主機

上週末使用 VNC 與 teamviewer 搞定了二哥的 EDA Cloud 固定 IP 連線問題後, 有網友留言推薦 Anydesk 更好用, 二哥早一些時候也 Line 我試試 Anydesk, 我測試過後結論是 : Anydesk 比 VNC 好用 (不須註冊登入雲端), Teamviewer 則只是堪用而已 (因為常斷線). 

Anydesk 下載網址如下 :

https://anydesk.com/en




它會自動偵測電腦是哪種作業系統, 按 "Download Now" 即下載 Anydesk.exe 檔, 大約 3.7MB 而已, 比 Teamviewer 小很多. 此程式為 portable 不需安裝, 直接執行即可 : 




它的視窗介面很簡單, 右上方的 "安裝 Anydesk" 鈕則可將 Anydesk 變成安裝程式, 也就是會複製捷徑到系統程式資料夾內. 左邊上面顯示的數字是本機的連線 ID, 當別人要連線這台電腦時要告知對方此 ID. 左邊下方的輸入框是用來輸入欲連線的遠方主機 ID, 輸入完按 "連線" 鈕, 被連線的主機接到連線請求時會出現如下畫面 :




按左下角的 "接受" 鈕允許連線, 成功後對方就可以看到我方電腦桌面了 :




這種連線互動需要兩方都有人在電腦旁邊時才能完成, 如果遠端主機無人值守 (沒有人在現場按接受鈕), 但我方想要隨時可連線該怎麼辦? 這時可設定一個安全性夠高的固定密碼, 按右下角的 "設定無人值守的密碼 ..." 鈕, 勾選 "啟用吾人值守存取" : 




然後在彈出視窗中設定一個固定密碼 (必須包含大小寫, 數字與符號等較複雜的組合才行), 這樣遠端主機連線這台電腦時就可以直接輸入固定之密碼了 :




設好後按 "套用" 鈕即可, 密碼要記下來告知遠端連線者. 遠端用戶連線時會出現密碼驗證視窗, 通過驗證就會出現遠端主機的桌面了. 




操作起來感覺反應迅速非常順暢, 視訊品質跟 Teamviewer 或 VNC 差不多, 但最重要的是連線穩定, 不會像 Teamviewer 那樣突然給你斷線. 

參考 : 

AnyDesk 最快的遠端桌面軟體,免費免安裝中文教學


此外, Anydesk 還提供了遠端網路開機 (喚醒) 功能, 但這需要網路卡有 LAN Wakeup 功能才可以, 我檢查鄉下加這台電腦的 "裝置管理員" 的 "網路介面卡" 沒看到電源管理這選項, 所以沒辦法 : 






2021-10-01 補充 :

Anydesk 介紹說支援 Windows, Linux 與 macOC, 所以就想說試試看樹莓派可不可以, 因為 Raspbian 也是出自 Debian, 同樣於下載頁按 "Download Now" : 






點選 Debian 32 bit 版 (因為 Raspbian 是32 位元), 到 Downloads 下執行該 .deb 檔 : 



結果無法安裝 (試過 64 位元版也不行) : 




可能 Raspbian 還不支援, 那就算了, 繼續用 VNC 也不錯. 

機器學習筆記 : Transformer 閱讀摘要

以下是最近看 "精通機器學習 (第二版)" 這本書第 16 章 Transformer 的筆記 :
  1. Google Brain 團隊的 Ashish Vaswani 等人於 2017 年發表了一篇開創性的論文 "Attention Is All You Need", 他們丟棄了 CNN 與 RNN, 提出了一個稱為 transformer 的結構, 這是一種以專注力機制 (attention mechanism, 即單詞的注意或關注程度的量化方法) 為基礎的 seq2seq 模型, 只使用專注機制加上 embedding 層, 稠密層, 與正規化層等組成的編碼解碼器結構即顯著改善了神經機器翻譯 (Neural Machine Translation) 的水準.
  2. Transformer 的基本結構是 encoder-decoder, 來源句會先經過 word embedding 與 positional encoding (位置編碼) 轉成外形為 [批次大小, 最大輸入句子長度] 的單詞 ID 張量, 然後送進堆疊 N 層的 multi-head attention 與前饋網路結構. 編碼器會將各個單詞編碼為 512 維表示法, 故編碼器的輸出是外形為 [批次大小, 最大輸入句子長度, 512] 的張量. 目標句同樣經過 word embedding 與 positional encoding (位置編碼) 轉成單詞 ID 張量, 然後送進堆疊 N 層的 masked multi-head attention 與 multi-head attention, 以及前饋網路, 每一層裡的 multi-head attention 層也接收來自編碼器的最終輸出, 這 N 層經過最後的 softmax 層後輸出一個外形為 [批次大小, 最大輸入句子長度, 詞彙表長度] 的機率張量. 


    Source : pytorch.org

  3. 編碼器的 multi-head attention 層負責編碼來源句每個單字與句中其它單字的關係, 然後把注意力放在較相關的那個字上面 (稱為 self-attention, 句子本身的注意力). 解碼器中的 masked multi-head attention 層也做同樣的事, 但與 multi-head attention 不同之處是每個單字只關注在它前面的其它單字 (masked 的意思就是用一個遮罩來防止單字拿自己與它後面的單字做比較, 只能跟它前面的做比較). Multi-head attention 層並不考慮單字的順序或位置, 它只關注單字之間的關係, 而且其它層也都是時間分散的, 無法得知單字在句中位置, 這就是為什麼需要 position embedding (位置嵌入) 的原因, position embedding 是一個代表單字在句子中位置的稠密向量, 它會在輸入層被加入該單字的 word embedding 中 (即第 i 個 position embedding 會被直接加入第 i 個單字的 word embedding 中), 這樣模型就可以讀取各單字的位置了 (這些 position embedding 在模型中是可以學習的). 
  4. Mult-head attention 層是由多個 Scaled dot-product attention 層組建而成的, 這些層用來查詢 (query) 單字的許多不同特徵, 透過公式計算單字串 Q (query) 與 K (key) 的相似度, 經過 softmax 轉換後再與 V (value) 做內積,  Transformer 所使用的相似度指標是內積. 機器翻譯與資料庫的查詢動作類似, 但模型沒有一個明確的 key (鍵) 來查找, 它有的只是模型於訓練期間學習到概念之向量表示法, 解決辦法是計算 query 與字典的各個鍵之間的相似度, 然後用 softmax 將相似度轉成總和為 1 的權重. 在 TensorFlow 中 keras.layers.Attention 實作了 Scaled dot-product attention 層的功能.
  5.  單字表示法編碼了單字的許多不同特徵, 例如位置 (利用 position embedding) 與時態等等, 而 Mult-head attention 層裡面的多個 Scaled dot-product attention 層就是用來讓模型以不同方式透過縣性轉換將單字表示法投射到不同的子空間, 每一個投射都專注於一個單字特徵的子集合 (例如動詞, 過去式等), 查找 (query) 完畢後將所有結果組合起來再投射回原本的空間.  
  6. NMT 領域的進展很快, 沒有人能預測明年會流行甚麼結構, 當今最流行的 NMT 結構是 transformer, 但未來也許 CNN 或 RNN 會捲土重來也說不定. 

參考 :


2021年9月29日 星期三

機器學習筆記 : 關於 TensorFlow 2

為了充分掌握機器學習的實作工具, 決定提前熟悉 TensorFlow 2, 以下是最近閱讀下列書籍中關於 TensorFlow 2 的摘要筆記 :
  1. 精通機器學習 第二版 (碁峰, 2020)
  2. Towards TensorFlow 2.0 無痛打造 AI 模型 (博碩, 2020)
  3. Applied Neural Networks with TensorFlow 2 (Apress, 2021)
  4. Learning Deep Learning (Addison Willy, nVIDIA, 2021)
TensorFlow 是 Geoffrey HintonJeffrey Dean, 與吳恩達領導的 Google Brain 團隊在其第一代神經網路系統 DistBelief 基礎上所開發的深度學習框架, 於 2015 年開放原始碼, 更好用的 TensorFlow 2 則於 2016 發表. TensorFlow 2 是一個大幅度的改版, 主要的改進有如下四點 :
  • Eager Execution :
    在 TensorFlow 1.x 時必須定義好計算流程圖, 然後呼叫 sess.run() 執行才會得到結果, 因此屬於靜態計算圖 (static graph). TensorFlow 2.0 之後程式輸入後即可馬上執行看到結果, 不需要透過 Session 去執行, 故屬於動態計算圖 (dynamic graph).
  • More Pythonic : 
    TensorFlow 1.x 版有自己的語法, 例如迴圈要使用 tf.while_loop 而非 Python 本身的 while 敘述, 造成了額外的負擔. TensorFlow 2.0 之後可使用 @tf.function 裝飾器來直接使用 Python 語法. 
  • tf.keras : 
    在 TensorFlow 1.x 時需另外安裝 Keras 套件才能使用這個方便的積木式高階 API, 但 TensorFlow 2.0 之後 Keras 已經被整合進來成為 tf.keras 子套件.
  • tf.data :
    TensorFlow 2.0 推出 tf.data API 來統一處理資料導入事宜, 方便處理資料流. 
TensorFlow 除了豐富的函式庫外, 還包含了用來視覺化的 TensorBord, 用來將 TensorFlow 產品化的 TensorFlow Extended, 存放機器學習模型的 TensorFlow Hub (可在 GitHub 模型花園下載已預訓練好的神經網路模型), 還開闢了 YouTube 官方學習頻道, 形成了一個完整的深度學習專案開發生態系, TensorFlow 專案的開發管線 (pipeline) 如下圖所示 :




TensorFlow 具有跨平台與跨語言特性, 可在 Windows, Linux, 以及 macOS 上運行, 其 API 除了 Python 外, 還支援 R, C++, Swift, Java, Go, 以及 Javascript 等語言. 

TensorFlow 底層都是以高效的 C++ 程式碼建構的, 其核心與 Numpy 類似, 硬體上不只支援在 CPU 上以低階的 Eigen 函式庫執行張量運算, 也支援顯示卡的 GPU 或 Google 客製化的 TPU 以及分散式計算等技術來提升訓練速度. 不過 TensorFlow 只支援在輝達 (nVIDIA) CUDA 技術架構的 GPU (使用 cuDNN 函式庫), 非 nVIDIA 顯示卡 (例如樹莓派) 無法使用 GPU 加速. 


TensorFlow 2.0 將 Francois Chollet 開發的高階神經網路函式庫 Keras 整合進來成為 tf.keras, 因此在 Python 環境下安裝 TensorFlow 後已經不需要再另行安裝 Keras. 納入 Keras 讓使用者能一氣呵成, 方便且快速地建構與訓練深度學習模型. 

TensorFlow 的 Python API 如下表 :
  1. 高階深度學習 API :
    tf.estimator
    tf.keras
  2. 低階深度學習 API :
    tf.initializers
    tf.losses
    tf.metrics
    tf.nn
    tf.optimizers
    tf.train
  3. I/O 與資料前處理 API :
    tf.audio
    tf.data
    tf.feature_column
    tf.image
    tf.io
    tf.queue
  4. Autodiff API :
    tf.GradientTape
    tf.gradients()
  5. 數學 API : 
    tf.bitwise
    tf.linalg
    tf.math
    tf.random
    tf.signal
  6. 特殊資料結構 API :
    tf.lookup
    tf.nest
    tf.ragged
    tf.sets
    tf.sparse
    tf.strings
  7. 部署與優化 API :
    tf.autograph
    tf.distribute
    tf.graph_util
    tf.lite
    tf.quantization
    tf.sved_model
    tf.tpu
    tf.xla
  8. TensorBoard 視覺化 API :
    tf.summary
  9. 其他 API :
    tf,compat
    tf.config
事實上有 95% 的深度學習專案只需要高階 API 中的 tf.keras 與 tf.data 即可完全處理掉, 如果需要更大的彈性, 可以使用低階的 Python API 來直接處理張量. 

安裝 TensorFlow 指令如下 :

sudo pip3 install tensorflow                (CPU 版)
sudo pip3 install tensorflow-gpu        (GPU 版)

此為 Linux 上的指令, 在 Windows 只要去掉 sudo 即可. 在 macOS 上安裝 TensorFlow 需有 Xcode 9.2 版以上才行 (但 macOS 目前不支援 GPU 版 TensorFlow). 

參考 :


其實更方便的 TensorFlow 執行環境是 Google Colab, 完全不需要安裝任何套件或購買價格不斐的顯示卡, 可選擇是否要使用 GPU/TPU 來加速, 參考 :


2021年9月28日 星期二

機器學習筆記 : Seq2seq 與 NMT 閱讀摘要

下面是閱讀 "TensorFlow 自然語言處理" 第 10 章 "Seq2seq 序列轉序列-NMT 神經機器翻譯" 的摘要筆記 :
  1. 序列轉序列 seq2seq 是學習兩個任意長度序列之間的對應關係, 這種多對多對應關係的學習是最複雜的任務之一, 其應用例如神經機器翻譯 (NMT, Neural Machine Translation) 與聊天機器人 (chatbot) 等, Google 翻譯就是 NMT 的典型應用, 可將來源語言翻譯成目標語言. 人類的語言超過 5000 種, NMT 技術可大幅降低不同語群交流溝通的障礙. 
  2. 機器翻譯最早可追溯到 1950 年代的 Geogetown-IBM 實驗, 早期以雙語辭典為基礎進行單詞轉單詞翻譯, 但此方式沒有考慮前後文, 故錯誤率, 比人工翻譯更慢. 後來演進為以語料庫為基礎 (copora-based) 的機器翻譯, 此法以來源句子與相對應的目標句子組成一個 tuple 來進行訓練, 大量的這些對應句 tuple 組成了平行語料庫, 此法比單詞轉單詞結果要來得正確. 還有一種技術叫做語際 (Interlingual) 機器翻譯, 是先將來源句翻譯成一種中性的元語言 (meta language), 然後再生成目標語言. 它基本上是由分析器 (analyzer) 與合成器 (synthesizer) 構成, 前者會辨識來源句裡的主體與所進行之互動, 並以語際詞素 (interlingual lexicon) 來表示, 後者則將這些語際詞素依據目標語言之句法規則生成目標句子. 
  3. 在 NMT 系統出現之前, 統計機器翻譯 (SMT, Statistical Machine Translation) 技術已存在半個世紀之久, 它是利用語言的相關統計數字來生成另外一種語言的翻譯. 以片語為基礎 (phrase-based) 的翻譯模型會根據給定的來源片語學習不同候選目標片語的機率分布, 但這種作法的成本很高 (因為所需之片語資料庫非常大), 故又進化為以語法為基礎 (syntax-based) 的 SMT 技術, 此法將來源句以語法樹 (syntax tree) 表示, 它首先會依據目標語言語法的 r-table 將語法樹重新排序 (re-ordering), 調整主詞, 動詞, 與受詞之順序, r-table 是紀錄語法樹重排序的機率表. 接下來是插入 (insertion) 程序, 它會將一個單詞根據 n-table 的機率表隨機插入到語法樹的每個節點中生成目標單詞. 最後將語法樹的每個葉節點逐一轉換成目標單詞, 再從語法樹中讀出目標句即完成翻譯. 
  4. NMT 大約是在 2014 年左右問世, 它是一種端對端 (end-to-end) 翻譯系統, 只要輸入完整的來源句就會轉換出相應的目標句, 完全不需要進行特徵工程 (例如構建片與翻譯模型與語法樹等), 在短短兩三年內超越 SMT 技術成為機器翻譯的新主流. NMT 主要是由編碼器 (encoder) 與解碼器 (decoder) 構成, 所以也是一種 encoder-decoder 架構, 這與傳統的語際 (interlingual) 機器翻譯概念類似. 編碼器會先讀取來源句, 生成時間序列模型的前後文向量 (context vector), 此向量對應人類讀完後心中所形成的思維或概念 (稱為思維向量), 然後由解碼器將其轉成目標句, 解碼器會為詞彙表的每個單字輸出一個分數, 然後用 softmax 層將其轉成機率, 機率最高者即為輸出. 前後文向量是連結編碼器與解碼器以形成端對端系統一連串計算的關鍵. 不論是來源句或目標句在進入 LSTM 網路前都會使用到詞彙內嵌層 (word embedding layer) 將單詞轉成內嵌向量, 以作為時間序列模型的輸入, 編碼器與解碼器使用兩組不同的 LSTM 網路來實作, 如此可增加模型中參數的數量, 提升翻譯效率. 
  5. NMT 的編碼器在將前後文向量送進解碼器之前可能還會執行一項特殊的操作, 就是將來源句的語序顛倒, 例如 I love you 變成 you love I, 這麼做可顯著改善模型的表現, 特別是來源句與目標句的語序是相同的語言時 (例如都是 SVO 語言). 但這是具有主觀性的預處理步驟, 並不一定要進行.
  6. 注意力機制 (attention mechanism) 是機器翻譯上非常關鍵的突破之一, 它有效地提高了 NMT 系統的表現, 因為前後文向量其實不足以提供良好翻譯所需的完整資訊, 這會導致解碼器的表現不佳 (雖然 LSTM 具有長期記憶, 但對於很長的句子還是力有未逮), 無法得出良好的翻譯, 注意力的做法則突破了前後文向量這個瓶頸, 它可讓解碼器存取編碼器的完整狀態歷史, 存取到來源句非常豐富的表達方式, 而且解碼器使用的 softmax 層可讓解碼器根據過去所觀察到的編碼器計算加權平均以作為解碼器的前後文向量, 因此可在不同的解碼步驟中對不同單詞給予不同的注意力.  

以下是看 "精通機器學習 (第二版)" 這本書第 16 章關於 NMT 的筆記 :
  1. 當輸出字彙表很大時, 輸出每個單字的機率會大幅將低運算速度, 如果目標詞彙表含有 5 萬個單字, 解碼器就須輸出 5 萬維的向量, 用 softmax 計算這麼大的向量會耗費巨大計算資源. 解決辦法是在訓練期間使用抽樣式 softmax 技術, 在 TensorFlow 有提供 tf.nn.sampled_softmax_loss() 函數可用, 但要注意, 抽樣式 softmax 只能在訓練時用, 在推論時必須使用一般的 softmax, 因為它要知道目標. 在 TensorFlow Addon 裡提供了許多 sequence-to-sequence 工具, 可讓使用者輕鬆建立準生產的 encoder-decoder 模型.
  2. Dzmitry Bahdanau 等人在 2014 年發表了專注力機制這個開創性論文 "NMT by Jointly Learning to Align and Translate", 他們提出的技術可讓解碼器在每個時步專注於編碼器輸出的適當的單字, 使從輸入的單字到它的翻譯之路徑短很多, 所以 RNN 短期記憶的影響就少很多, 專注力機制徹底改變了 NMT 與 NLP 的面貌, 特別是超過 30 個字的長句翻譯. 
  3. NMT 最常見的評量標準是 BLEU (BiLingual Evaluation Understudy) 分數, 它是將模型產書的譯文與人類的優質譯文做比較, 計算出現在目標譯文裡面的 n-grams (有 n 個單字的序列) 數量, 以及在目標譯文中產生 n-grams 的頻率來調整分數. 
  4. 專注機制不是只將編碼器的最後一個隱藏狀態傳給解碼器, 而是將所有輸出傳給解碼器, 在每一個時步, 解碼器的記憶細胞會計算所有編碼器的輸出之加權總和, 以此結果決定在此時步要專注哪個單字. 專注機制的目的是評量其中一個編碼器的輸出與解碼器上一個隱藏狀態的相似度. 

方便好用的 Google Colab 運算平台

前陣子在上公司的線上 ML 與 NLP 課程時, 老師都使用 Google Colab 平台做運算, 這是 Google 雲端硬碟所提供的免費 Jupyter Notebook 雲端執行環境, 上面已經搭載最新版的 Python 技術堆疊, 包括 Numpy, Pandas, Matplotlib, SciPy, Sympy, TensorFlow, 以及 Keras 等套件, 可以直接使用它來進行資料科學運算或執行機器學習專案, 完全不需要自行安裝任何模組或套件, 而且可免費使用 GPU/TPU 來加速, 運算過程也能像地端 Jupyter Notebook 環境一樣將 ipynb 檔案儲存在 Google Drive 並分享, 實在非常方便. 


1. 新增雲端硬碟資料夾 :   

只要登入 Gmail 帳號後開啟 Google 雲端硬碟就可以馬上使用 Colab, 為了不使檔案凌亂, 首先在 Google Drive 新增一個資料夾 (例如 Colab Notebooks) 來存放所有的 ipynb 檔案 : 




按 "+ 新增" 鈕點選 "資料夾", 輸入新資料夾名稱, 例如 Colab Notebooks, 按 "建立" : 






2. 新增 Colab 筆記本 (ipynb 檔) : 

切換到新增的 Colab Notebooks 資料夾, 再按 "+ 新增" 鈕, 點選最底下的 "更多", 在彈出的子選單中點選 "Google Colabotary" 即可 : 




結果會開啟一個空白的 Jupyter Notebook 頁面, 這樣就可以輸入程式開始執行專案了 :


但如果是第一次使用 Colab, 則按 "+ 新增" 鈕時, 在選單最底下並沒有 "更多" 這個選項, 而是出現 "+ 連結更多應用程式", 點選此項目後在彈出的 "將應用程式連接到原ˇ灣硬碟" 頁面右上角輸入框裡填入 "Colaboratory", 然後按 Enter 鍵就會找到 Colab 應用程式, 再按下 "+ 連接" 鈕, 這樣再次按 "+ 新增" 鈕時, 選單最底下就會出現 "更多" 選項了. 

直接在 Jupyter Notebook 的輸入格中輸入指令, 然後按最前面的播放鈕 (向右鍵) 即可執行該列指令. 注意, 按 Enter 鍵是跳行繼續輸入而非執行指令. 按 "+ 程式碼" 會在向下新增一個程式碼輸入格, 每一個輸入格都可隨時按前面的播放鈕重新執行該列程式碼 :

 



Colab 的程式碼預設是以 CPU 執行, 但可以在上方 "執行階段" 選單中點選 "變更執行階段類型", 可以選擇 "None (預設)/GPU/TPU" 三種執行類型, 然後按 "儲存" 鈕即可 : 





在執行機器學習/深度學習專案時, 選擇 GPU/TPU 類型可以提升運算速度. 

建立空白筆記本時預設的名稱是 Untitle0x.ipynb, 可點選 "檔案" 選單中的 "重新命名" 更改 :





此外, "檔案" 選單中常用的功能還有 "儲存", "上傳筆記本" (可將本機的 ipynb 檔上傳到雲端硬碟), 以及 "在 GitHub 中儲存副本" 等功能, 特別是後者可程式碼筆記本分享到公開的 GitHub. 


3. 分享 Colab 筆記本到 GitHub : 

首先在 GitHub  新建一個寄存庫 (repository, 此處取名為 colab) 來儲存筆記本副本, 按 GitHub 頁面右上角的 "New repository" 鈕新增寄存庫 : 



在 "Repository Name" 欄內輸入寄存庫名稱例如 colab, 於 Description 欄內簡要說明用途, 勾選 "Add a README.rd", 然後按最底下的 "Create repository" 鈕即可 : 






然後回到 Colab 網頁, 點選 "檔案/在 GitHub 中儲存副本", 顯示 "等待 GitHub 的授權" 頁面, 然後在彈出視窗中輸入 GitHub 密碼即可 : 









按右下方的 "Authorize googlecolab" 鈕會彈出下列視窗, 點選上面新增的 colab 寄存庫後按 "確定" 就會在 GitHub 建立此筆記本的副本了 :






這樣此筆記本即分享於 GitHub 公開寄存庫了. 


4. 安裝第三方套件 : 

雖然 Colab 上已經預安裝了許多第三方套件, 但不可能應有盡有, 例如台股技術分析套件 twstock 就沒有, 用 import twstcok 指令會出現 "No module" 錯誤 : 




可用 !pip install 指令安裝 Colab 沒有預安裝的套件, 例如 : 

 !pip install twstock    




這樣就能順利匯入 twstock 套件了 : 




參考 : 



5. 下載與上傳 .ipynb 或 .py 檔案 : 

Colab 筆記本除了自動儲存在 Google Drive 外, 也可以下載 ,ipynb 或 .py 檔案到本地儲存, 只要2u點選 "檔案" 選單最底下的 "下載", 然後選擇要下載 .ipynb 或 .py 檔即可 : 




下載保存的檔案以後可隨時上傳到 Colab 重新執行. 

我們可先將此筆記本刪除, 作法是在 "檔案" 選單中點選 "移至垃圾桶" :





刪除後可在 "檔案" 選單中點選 "上傳筆記本" 後點選本機的 ipynb 檔上傳即可 : 


 


6. 重設 Colab 執行環境 (關閉筆記本執行資源) :   

因為 Colab 是分享的執行環境, 故執行完所有運算後最好將筆記本的 Colab 執行環境關閉以便清除所佔用的計算資源, 作法是點選 "執行環境" 下的 "恢復原廠設定的執行環境" :
 




有 Colab 就不用為了用 GPU 跑機器學習去買顯示卡啦! 還可以直接使用 Google 的高效能 TPU, 程式碼筆記本除了記錄在雲端硬碟, 還可以秒分享到 GitHub, 比起在本機安裝龐大的 Conda 執行環境來說真是太方便了!



2021年9月27日 星期一

QRV 11 萬公里保養

今天犧牲午休, 中午回家將車子開去 Nissan 裕昌大中保養廠做 11 萬公里預約保養 (已開 15.6 年才跑 11 萬, 似乎 ...), 早上打電話給原本幫我服務的黃技師, 才知道上周他在回家路上發生車禍受傷, 要在家休養一陣子, 公司會指派其他技師服務, 只好請他好好休養, 早點回去上班. 

我放好車後騎他們提供的 eMoving 電動機車回公司上班. 接手的蔡技師檢視後回報發現發電機皮帶有裂痕, 四輪來令片已硬化這兩項攸關行車安全建議更換, 而冷媒更換我覺得冷房效果還可以先不動, 追加這兩項都不便宜, 下班後去結帳總共是 12000 多元 (部分打 73 折), 原廠不便宜, 但到外面又不放心, 所以不論是以前那台 Tercel 還是現在的 QRV, 我一直都在原廠保修. 

萬萬的教師節卡片

今天下班時在信箱收到一封寄給萬萬貓的明信片, 哈哈, 原來明天就是教師節, 是菁菁的同學陳利佳寫的教師節卡片, 阿佳居然把萬萬貓當老師哩 :





以前有一次載她們放學就聽阿佳說她好喜歡我們家萬萬, 是萬萬的頭號粉絲. 

2021年9月26日 星期日

2021 年第 39 周記事

本周因中秋連假只上了三天班又放假了, 感覺過好快. 這幾天為了還書而猛 K 自然語言處理, 但也只是吸收概念而已, 沒有實作只看書感覺好空虛啊. 決定還掉書之後要來好好把 TensorFlow 2 啃一啃, 要不然會沒辦法做實驗. 

周四晚上終於將九集的 Netflix 韓劇 "魷魚遊戲" 看完, 謎底揭曉, 原來 .... 哈, 不能說. 這是自看完 "黑道律師文森佐" 以來會急著想要看下一集的作品, 但因為劇情太過血腥列入 18 禁, 兒童不宜. 


原本打算這周末開始重新安裝鄉下老家頂樓的雨水收集管路, 因為年初時以前在資材行買的 250 公升水桶都中間裂掉破洞只剩一半儲水量 (只用了約 2~3 年), 我一直沒時間處理就放著. 最近頂樓 PU 做完就想用阿正兄擺在後院的超耐水桶來重新裝設管路, 今早路過小漢再買了一組出水閥含固定圈共 95 元, 打算有空鑽孔安裝在第三個水桶上, 但我從昨天下午回來就一直在忙著二哥那台電腦的遠端連線測試 (近傍晚終於全部搞定), 所以這件事要延到下周啦.  

晚上快八點正準備去洗澡, 聽到外面有貓叫聲, 但不是小雖貓, 我趕緊出去查看, 發現是一隻棕色的大貓往菜園遁走, 我之前有想要在小雖貓母子在車庫置物架夾層的小窩裝米家監視器 (買來好幾個月都放著), 擇日不如撞日, 剛好在書房找到爸舊手機的 8GB MicroSD 卡, 剛好派上用場. 備份格式化後插入米家監視器, 在手機米家 App 新增設備選擇手動連線, 出現 QR Code 後給監視器掃一下就連線成功了. 找了一條舊的延長線從上回安裝側門監視器的插座拉線到小雖貓的窩, 把監視器用兩塊木板壓住, 鏡頭剛好對準他們的窩, 哈哈, 這樣我就能遠端觀察牠們了 :




我之前都要用手探進去摸小貓貓才知道在不在, 有了這個監視器就不用啦. 

用 VNC Cloud 遠端連線 Windows 主機

昨天下午回到鄉下就開始忙二哥搬回鄉下家的那台遊戲用桌電, 因需要以固定 IP 連線國家實驗研究院半導體中心的 EDA Cloud 主機, 吃過晚飯後終於搞定以 PPPoE 撥接連線上網問題, 順利取得固定 IP, 參考 :


接下來便是如何從遠端連線到鄉下家的這台桌電問題, 最簡單的方式當然是使用 Windows 的遠端桌面, 但那必須升級到 Win 10 專業版, 參考 : 





但這台桌機是家用版, 故不可行. 我覺得樹莓派使用的 VNC 很不錯, 上網搜尋 "VNC Windows" 發現 VNC 也有支援 Windows, 於是下載安裝 VNC Server for Windows, 測試確實可透過 VNC Cloud 遠端控制 Win 10 桌面, 參考 :


下載 VNC-Server-6.7.4-Windows.exe 後直接執行安裝後要用 Email 註冊一個 VNC Cloud 帳號並設定 Cloud 密碼, 註冊完登入後會要求設定遠端連線密碼, 遠端電腦透過 VNC Cloud 連線此主機時須輸入此密碼, 但要注意, 此連線密碼不可以跟 VNC Cloud 帳戶之密碼相同 :




接著可為此電腦命名, 此名稱會顯示在遠端電腦登入 VNC Cloud 後的主機列表中, 預設會使用此台 PC 的名稱 : 


 



這樣 VNC Server 便安裝完成了. 

接下來便可從遠端連線這台主機了, 首先在遠端電腦安裝 VNC Viewer (也有免安裝版) :

https://www.realvnc.com/en/connect/download/viewer/

安裝完後執行 VNC viewer, 按右上角的 Log in 登入 VNC Cloud 帳戶, 成功後就會看到此帳戶可連線的主機列表 (免費用戶只能有 5 台可連線主機) :




其中第一台名稱為 "DESKTOP QOQL..." 的主機即上面安裝 VNC Server 並登入此帳號之主機, 點選此主機會要求輸入該主機連線密碼 (我設為二哥的手機號碼) :




密碼正確的話就可以順利連線遠端主機的桌面啦 :




VNC Cloud 非常好用, 即使主機位於防火牆或社區網路內都能連線得到. 

除了 VNC 外, 也可以使用 Teamviewer, 其優點是畫面較清晰且操作反應迅速, 但缺點是免費用戶常常莫名其妙突然斷線, 且遠端主機桌面被它固定大小的視窗限制住. Teamviewer 免費版下載網址如下 :


執行 Teamviewer 之後會顯示這台電腦的 Teamviewer ID 與隨機連線密碼 :




然後將此 ID 與密碼告知遠端欲連線者, 他同樣執行 Teamviewer, 然後在右方 "控制遠端電腦" 的夥伴 ID 欄填入欲連線的遠端主機之 Teamviewer ID, 然後按連線, 這時 Teamviewer 會要求你註冊免費帳號, 註冊完成才能連線 : 




如果已有 Teamviewer 帳戶就點底下的超連結登入, 否則就按 "建立帳戶" 鈕新建. 




這樣就可以順利連線遠端主機的桌面了 :






不過 Teamviewer 只有 Windows 版, 因此無法從 Linux 主機與 Windows 主機互連, 而 VNC Cloud 則都可以, 所以可以從樹莓派連線到 Windows 主機. Teamviewer 三不五時就突然斷線真的非常討厭, 它的付費版帳戶價格也不斐, 所以還是用 VNC Cloud 吧!


2021-09-26 補充 :

今天下午將 PC 重開機發現 VNC Server 也不會自動啟動, 所以在解決啟動自動撥接上網問題後如法炮製, 將 VNC Server 執行檔的捷徑也放進啟動 (系統) 資料夾內. 首先在開始功能表內找尋 RealVNC, 底下只有一個 VNC Server 執行程式, 點滑鼠右鍵選 "更多", 再按滑鼠右鍵選 "開啟檔案位置", 這會開啟程式安裝目錄下的 RealVNC 資料夾 : 





可見底下有一個 VNC Server 的執行檔捷徑, 按滑鼠右鍵複製此捷徑 :




然後在開始旁邊的搜尋框輸入 "執行" 找到 Execute 程式點選執行 : 




貼入系統資料夾 "啟動" 的路徑 :

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp




這會開啟 "啟動" 資料夾, 然後按滑鼠右鍵, 貼上上面複製的 VNC Server 捷徑 :




這是系統資料夾, 按繼續即可 : 





這樣重開機後就會自動執行 VNC Server 了.