發表文章

[Keras筆記]用ImageDataGenerator訓練大型資料集需要注意的幾件事

圖片
以前訓練小資料集都是用model.fit(X,Y) 評估訓練過後的模型用model.evaluate(...) 測試單張圖片則是用model.predict(image) 而因為以前學的時候,只是用小型資料集做練習,所以我們使用的標籤都會是自己定義的indices 現在常會接觸到大型資料集,所以訓練方法會變成: 訓練模型的時候用model.fit_generator() 評估模型的時候用scores = model.evaluate_generator() #這個會回傳一個list,像這邊score是一個list,會有兩個數字,第一個數字我記得是代表loss,第二個數字是準確度,範圍在0~1.0之間,所以要再自己準換成百分比。 evaluate_generator()就是由照片所屬的資料夾名稱下去推斷照片預測的是不是屬於正確的類別,也就是有正確答案作為參考,所以才算得出準確度來(scores[1])。 用模型去做批次照片的預測機率用scores = model.predict_generator() #假如有10個資料夾(分10類),每個資料夾有3張照片要做測試,則scores就是一個[30, 10]的array型態。 而要用訓練完的模型去做「單張」照片的預測,有兩種方法可以使用: (1) model.predict(image) #會回傳一個numpy array,每個數值代表預測出每個類別的機率。 (2) model.predict_classes(image) #會回傳預測出機率最高的類別「索引」。 這裡就有趣了,這邊的每個類別的機率分佈跟「索引」代表的是「generator.class_indices」所推斷出來的索引,而不是按照檔案總管裡面資料夾的排序當作索引。 我會發現這個問題是因為我在交叉使用model.predict_generator()跟model.predict()時,機率的分佈跟預測出來的類別有很大的不一樣,一開始還以為是訓練出問題,原來只是generator推斷的類別索引順序跟我想的不一樣,或是說以前用model.predict()的概念不同罷了(汗... 解決辦法: 參考網路上別人的發問,要使用model.predict_classes()找出測試的對應類別機率和預測的類別,只要做個dictionary做簡單的轉換就好。 [標籤轉換]ht...

[課程筆記] Introduction to TensorFlow for Artificial Intelligence, Machine Learning, and Deep Learning - Coursera

圖片
常在用keras搭模型,很常會看到這樣的寫法: 簡單來說,步驟就是: 1.定義模型架構   (在keras可以是Sequential或Functional) 2.編譯模型  ( model.compile(...) ) 3.有一筆整理過後的data與label  (xs, ys。視你的問題,給定什麼樣型態的資料) 4.訓練模型  (  model.fit(...) ) 要用比較直觀的方式來描述上面整件事,我認為講師 Laurence的說法值得我學習。 他是這麼解釋的: 1.因為model不知道data和label的關係,所以.. 2.先讓model試著猜出一個xs跟ys的對應函數(e.g. y = 10x - 1) 3.根據猜測的結果,用loss function來衡量model猜測的結果是好或壞 4.把loss function得到的資訊交給optimizer來找出下一輪的猜測,而這個猜測的原則是下一輪的猜測要比前一次的還要好(e.g. 可能猜y = 5x - 1、y = 3x - 1之類的 ) 5.根據epochs次數,重複做1. ~ 4.的猜測嘗試 以下是幾個簡單的問答參考:

Raspberry Pi - 利用AnyDesk遠端到樹莓派,並保持螢幕解析度不縮放

圖片
這篇教學 不一定 適用於所有樹梅派裝置,僅對於我的實驗裝置做紀錄。 自從接手畢業學長的計畫,其中一個案子是農試所的粉蝨裝置的拍攝紀錄。 簡單來說,這份計畫有一個工作是在溫室架設多台樹莓派裝置,而在每個小時整,都會上傳一張由樹莓派裝置所拍攝的粉蝨黏蟲板,進而透過累計起來的照片,分析每小時粉蝨的數量多寡。 而當初在知道有這個計畫的時候,就知道一些已知的問題,其中一個問題是溫室的網路很不穩定,會造成照片無法上傳、漏上傳,或是其他一些千奇百怪的狀況。 為了要避免照片沒辦法從遠端拿到,所以我最近想了一些簡單好處理的方法,可以避免這樣的問題發生。 其中一個狀況是: 假設樹莓派可以透過遠端連線去控制,再把沒有拿到的照片拿回來。 所以我在樹莓派安裝AnyDesk,這樣就可以從電腦遠端連過去處理資料。 但是自己測試時,樹莓派是有用HDMI連到螢幕的,然後電腦再連過去,所以看到的畫面會變成這樣: 在理想狀況下,兩邊的螢幕解析度都是1080p。 但是在我不讓樹莓派接HDMI時(也就是模擬樹莓派裝置放在溫室的情況下,我要連回去遠端控制) 情況會變成這樣: 可以發現螢幕比例縮放成超小,不好操作。 要解決這個解析度問題,後來有找到AnyDesk有設定可以調整。 步驟1: 到樹莓派系統設定(Raspberry Pi 設定) -> Resolution -> 把預設的preffered xxx 改成「DMT mode 82 1920x1080 60Hz 16:9」 設定完後,它會要你重新開機,這裡就讓它重開機。 步驟2 (這步應該可以不用做,但是以防縮放問題,我還是有做): 重開機後,進到AnyDesk的設定 -> 顯示器 -> 把檢視模式設定成「原始大小」 -> 按「關閉」。 然後關機、拔HDMI線,斷電後再重開機。 接著從電腦遠端回樹莓派試試看: 應該就可以完成完整解析度的操作啦~

Basler 工業攝影機配置設定 (for SIPLab)

圖片
實驗室有兩台工業用攝影機,上一屆學長是透過上銀的機械手臂搭配攝影機做手眼校正(就是常聽到的Hand-eye Calibration)。 最近開始在陸續交接上一屆的案子,而我又是金魚腦,大概講完事情,如果沒做筆記,不用3分鐘就會全部忘記了。 所以寫這一篇的原因是防呆(誤),想說要交接的東西太多,我又有兩個計劃要接,真的比較難憑空記下學長做的東西,於是乎先寫下這一篇做個紀錄。 這篇文章主要只講Basler工業攝影機在自己實驗室的安裝跟配置,如果外面的人要參考也可以,但是不一定會適合所有部署情況。 另外,除了比較重要的下載連結,皆是用ppt轉圖片輸出到網誌,雖然這樣'不好查找,但想說偷懶直接貼上比較快速。 那就正文開始吧! ======================================================= ACa1300-30gc機型的官網,請到 https://www.baslerweb.com/en/products/cameras/area-scan-cameras/ace/aca1300-30gc/  找到Software標籤(ACa1300-30gm也雷同) Basler pylon Camera Software Suite連結 :  https://www.baslerweb.com/en/sales-support/downloads/software-downloads/#type=pylonsoftware;series=baslerace QA: Q1: 在用工業攝影機拍照的時候,若遇到照片來不及傳輸(下圖的情況),該如何處理? 錯誤碼輸出:  The buffer was incompletely grabbed. This can be caused by performance problems of the network hardware used, i.e. network adapter, switch, or ethernet cable. To fix this, try increasing the camera's Inter-Packet Delay in the Transport Layer category to reduce the required b...

Ubuntu - 用Anaconda安裝新的虛擬環境 : 以tensorflow-gpu套件為例

圖片
  這篇教學同時提供影片版,可以參閱 我的頻道 Step 1: 安裝tensorflow-gpu套件 打開Terminal視窗。 建立虛擬環境,這裡我想要把虛擬環境名稱設為deeplearning,所以指令要這樣打: conda create - n deeplearning tensorflow - gpu 按下Enter後,它會列出要安裝的相關套件,按下鍵盤上的y、在按一次Enter鍵,進行安裝。 接著要等待幾分鐘讓他跑完(如下圖)。 Step 2: 啟用虛擬環境 我們在Step 1跑完安裝流程後,接下來要啟用新建立的虛擬環境。 輸入指令 conda    activate deeplearning 來啟用虛擬環境(如下圖)。 在指令列前綴,可以看到已經切換到deeplearning虛擬環境,表示我們目前就是在deeplearning這個環境下運作。 Q: 那我們要在這個環境下使用Jupyter notebook 或是 Spyder IDE 來寫Python,要怎麼做? A: 在新的deeplearning虛擬環境,發現沒有預先安裝 jupyter notebook ,所以使用 conda install -c anaconda jupyter 來安裝(如下圖)。 指令可以參考 : https://anaconda.org/anaconda/jupyter 跑完安裝流程之後,在command line輸入jupyter notebook,就會以預設瀏覽器(像我的設定是Chrome,所以它會用Chrome打開),然後就可以來建立.ipynb檔案寫Python啦! 而Spyder的安裝方式也大致一樣,在deeplearning虛擬環境下,使用指令 conda  install -c anaconda spyder 來進行安裝(如下圖)。 指令可以參考 :   https://anaconda.org/anaconda/spyder 安裝完後,一樣在 deeplearning 虛擬環境,下 spyder 指令,就可以打開 Spyder ,來寫 Python 程式了。

Python - 簡單5步驟,在Ubuntu 18.04安裝Anaconda3環境

圖片
這篇教學同時提供影片版,可以參閱 我的頻道 前置動作:  · (建議)新增一個使用者帳號(可以不用是Super user),這樣環境比較乾淨。 Step 1: 先到 Anaconda官網 ,點擊下圖中的連結。 滑到頁面下,找到Linux欄位,點擊 64-Bit(x86) Installer (550MB) , 或是 按我下載 。 Step 2: 下載完後,在本機端的 Downloads/ 下,會看到剛剛下載的shell script( .sh )文件, 先不要雙擊載入,不然會跑很久 。 Step 3: 官網的第二步基本上不用做,那個是檢查檔案下載下來的動作。 我們直接照官網的第3步做: 這裡要做的是  用bash來執行下面這一行指令: bash ~/ Downloads / Anaconda3 - 2020.07 - Linux - x86_64 . sh 這裡如果有看官網做的話,會發現官網其實沒有更新到上面那行指令,因為我在寫網誌時,檔名已經發佈到2020.07版本,所以要 依照自己下載下來的檔名做指令的修改(可以參考下圖) 。 輸入完成後,按下鍵盤上的Enter鍵。 Step 4: 接下來會來到Anaconda的安裝流程,以及程式的License,這裡一路按下Enter就好(參考下圖)。 License跑完後,最下面會有提示指令,問你是否接受License,這裡輸入yes,並按下Enter鍵。 下一個提示會要你確認預設安裝路徑,照官網的安裝指南, 建議我們都不要更改 ,所以就再按一次Enter鍵(參考下圖)。 按下enter後,會出現PREFIX=/home/<你Ubuntu當前帳戶的username>/anaconda3的畫面,這裡甚麼都不用做,只需要等待幾分鐘來讓系統處理安裝程序。 安裝指示會問你" Do you wish the installer to initialize Anaconda3 by running conda init? " 官網推薦yes,所以輸入yes,並按下Enter鍵(參考下圖)。 到這裡顯示Thank you for installing Anaconda3!,大致上就完成了,可以關閉目前的terminal視窗。 Step 5: 我們驗證一下是否有安裝成功,所以在Ubuntu開啟新的ter...