-
了解python載入模組的位置
Continue Reading…: 了解python載入模組的位置載入模組方式 一般來說,我們在專案裡面會使用import來載入現有模組 了解會從哪些路徑載入-在command line內 1.取得global的site-packages路徑 2.取得該使用者的library路徑(per-user) 了解會從哪些路徑載入-在Python程式碼內 那麼,這個cv2的預設位置在哪邊呢?會從哪裡載入呢? 想要了解這個問題,可以在py檔案裏面使用下列程式碼來印出會再入的library位置 可使用site.getsitepackages()或site.getusersitepackages()來了解現在會載入的函式庫位置 自行增加載入模組路徑 若想要自行增加模組的位置,則使用 上面程式碼代表會增加尋找位於dirname(__file__)的檔案 設定要載入的函式庫的路徑位置 有以下三種方法 添加環境變量PYTHONPATH,python會添加此路徑下的模塊,在.bash_profile文件中添加如下類似行: export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages 在site-packages路徑下添加一個路徑配置文件,文件的擴展名為.pth,內容為要添加的路徑即可 sys.path.append()函數添加搜索路徑,參數值即為要添加的路徑。 關於第二個點的介紹,請見此篇文章:https://www.itread01.com/qiqiq.html 可以先用上面的語法來尋找可能的函式庫搜尋路徑位置設定檔案的地方,找看看在上面的site-packages的資料夾裡面是否有任何的.pth檔案 一般來說,這個檔案會位於site-packages裡面,如:C:\Python39\Lib\site-packages 使用.pth設定在入路徑 或者可以直接在python的根目錄下增加python39._pth這個檔案 然後直接在檔案裏面增加要載入的路徑即可 裡面內容直接填上路徑即可,以下為一個簡單的python39._pth內容範例 放在與python.exe同一目錄
-
深度學習模型-MLP、CNN與 RNN
Continue Reading…: 深度學習模型-MLP、CNN與 RNN常見的深度學習模型 三種深度學習模型,包含:• MIP:多層感知器( Multilayer Perceptron)• CNN :卷積神經網路(Convolutional Neural Network )• RNN:循環神經網路(Recurrent Neural Netw ork) MLP、CNN與RNN的差異 多層感知器(簡稱 MLP)就是一個全連接網路。在某些文獻裡,它被稱為深度前饋(feedforward)網路或前饋神經網路。從目標應用來認識這些網路有助於我們理解這些進階深度學習模型的設計原理。MIP 常用於簡易的算術與線性迴歸問題。不過,MLP 在處理順序型與多維度資料樣式上的效能不是太好。它在先天設計上很難去記得順序型資料的樣式,並且需要相當大量的參數才能處理多維度資料。 RNN 很常用於順序型的輸入資料,因為其內部設計能讓網路去發掘歷史資料的相依性,這對於預測來說相當有用。 而對於圖片或影片這類多維度資料,CNN 在擷取用於分類、分割、生成或其他目的特徵圖都相當不錯。在某些狀況下,型態為1D卷積的 CNN 也可用於能接受順序型輸入資料的網路。然而在多數深度學習模型中,會把 MLP、RNN 與CNN 結合起來讓它們發揮各自所長。 MLP、CNN與RNN輸入的模型維度 在將資料傳入模型前會需根據模型類型來調整形狀 Keras把 MLP 層稱為 Dense,代表密集連接層。第一與第二MLP 層完全相同,各有256個單元,接著,是relu觸發與 dropout。之所以選用256單元是因為 128、512與 1,024 單元的效能較差。網路在128 單元時會很快收斂,但測試準確度也較低。而把單元數拉高到…
-
使用GrabCut抓取前景
Continue Reading…: 使用GrabCut抓取前景理論 GrabCut 算法由英國劍橋微軟研究院的 Carsten Rother、Vladimir Kolmogorov 和 Andrew Blake 設計。在他們的論文“GrabCut”:使用迭代圖切割的交互式前景提取中。需要一種算法來以最少的用戶交互進行前景提取,結果就是 GrabCut。 從用戶的角度來看它是如何工作的?最初用戶在前景區域周圍繪製一個矩形(前景區域應該完全在矩形內)。然後算法迭代地對其進行分段以獲得最佳結果。完畢。但在某些情況下,分割效果不佳,例如,它可能將一些前景區域標記為背景,反之亦然。在這種情況下,用戶需要進行精細的修飾。只需在有錯誤結果的圖像上畫一些筆劃即可。Strokes 基本上說 *“嘿,這個區域應該是前景,你將它標記為背景,在下一次迭代中更正它”* 或者它的反面是背景。然後在下一次迭代中,你會得到更好的結果。 請參見下圖。第一個球員和足球被包圍在一個藍色矩形中。然後進行一些帶有白色筆觸(表示前景)和黑色筆觸(表示背景)的最終潤色。我們得到了一個不錯的結果。 函數介紹 grabCut() 下面介紹幾個常用的參數: img – 輸入圖像 mask – 這是一個蒙版圖像,我們在其中指定哪些區域是背景、前景或可能的背景/前景等。它由以下標誌完成,cv.GC_BGD、cv.GC_FGD、cv.GC_PR_BGD、cv.GC_PR_FGD,或者簡單地通過0,1,2,3 到圖像。 rect – 它是包含格式為 (x,y,w,h) 的前景對象的矩形的坐標 bdgModel、fgdModel – 這些是算法內部使用的數組。您只需創建兩個大小為 (1,65) 的 np.float64 類型零數組。 iterCount –…
-
訓練模型-model.fit()的參數設定
Continue Reading…: 訓練模型-model.fit()的參數設定model.fit的參數 請見官網介紹: https://www.tensorflow.org/api_docs/python/tf/keras/Model#fit 通常label單類別最後使用softmax當作activation,多類別用sigmoid。在使用model.fit之前可用下列指令來查看模型的資訊: Batch size Batch size是在訓練神經網絡時,一次輸入給模型的訓練樣本數量。批量大小可以影響訓練的速度和效果,決定了模型在訓練過程中每次更新權重時使用的樣本數量。 在訓練神經網絡時,每一次將一個批次的訓練數據輸入模型並根據輸出調整模型參數的過程稱為一次迭代。 批量大小可以影響訓練的速度和效果。通常而言,批量大小越大,訓練速度越快,但是需要更多的內存。相反,批量大小越小,訓練速度越慢,但是需要的內存較少。 另外,批量大小也有助於控制梯度爆炸和消失的問題。如果批量大小太小,梯度可能會非常波動,導致訓練不穩定。如果批量大小太大,梯度可能會非常小,導致模型學習速度變慢。 因此,批量大小是一個需要平衡的超參數。通常,人們會根據自己的硬件配置和訓練目標來調整批量大小。 甚麼是更新權重 在神經網絡中,權重是用於計算網絡輸出的參數。每個神經元都有自己的權重,這些權重决定了該神經元對輸出的貢獻。 在訓練神經網絡時,權重是通過反向傳播算法來學習和調整的。在每次訓練迭代中,網絡將會根據輸入和預期輸出計算損失,然後使用反向傳播算法來調整權重,使得損失最小化。 在神經網絡中,權重是一種超參數,這意味著它們是由人為設定的,並不是通過訓練來學習的。超參數包括學習率、批量大小、正則化強度等,它們都對模型的訓練和性能有重要影響。 Epoch Epoch是指訓練過程中對整個訓練數據集進行一次完整的訓練循環。例如,假設你有1000個樣本的訓練數據集,批量大小為100,那麼你需要10次迭代才能完成一個 epoch。 在訓練神經網絡時,你可能會進行多個 epoch,以提高模型的精度。在每個 epoch 中,模型將會看到所有的訓練數據,並根據輸出調整模型參數。在許多情況下,經過足夠多的 epoch 後,模型的精度將會趨於穩定,並停止進一步提高。
-
卷積神經網路CNN介紹
Continue Reading…: 卷積神經網路CNN介紹卷積神經網路CNN 卷積神經網路(Convolutional Neural Network,簡稱 CNN)是一種專門用於圖像處理的神經網路。它包含許多卷積層和池化層,可以捕捉圖像中的空間關係和細節。 卷積層: Conv2D (tf.keras.layers.Conv2D),使用一個卷積核來提取圖片特徵 池化層: MaxPooling2D (tf.keras.layers.MaxPooling2D),通過計算輸入圖像的不同區域的最大值或平均值來進行池化 卷積層(Conv2D) 使用一個卷積核來提取圖片特徵。 以下為其參數設定的介紹: 卷積層(Conv2D)參數設定 卷積層中的每個神經元都有一個濾波器(也稱為卷積核),用來提取圖像的特徵。每個濾波器都有一個指定的大小和深度,並且會在輸入圖像的不同區域進行卷積運算。例如,如果濾波器的大小為 3×3,且深度為 16,則每個濾波器都會提取 3×3 的區域中深度為 16 的特徵。 以下為其計算方法的簡單範例 當有部分的卷積核超出圖片範圍時,有兩種方法去解決: 1. 忽略它: 將padding設定為valid 2. 將整個圖像周圍填充0: 將padding設定為same 池化層(MaxPooling2D) 池化層則是將輸入圖像的大小縮小的層,它的主要功能是對圖像的特徵進行下采樣 (downsampling),降低網絡的計算量並減少過擬合 (overfitting) 的風險。它通過計算輸入圖像的不同區域的最大值或平均值來進行池化。通過池化,可以將圖像中的高維度特徵轉化為低維度特徵、降低計算複雜度,同時還能保留圖像中重要的特徵。 最大值池化層和平均值池化層是兩種常用的池化方法。 最大值池化層對卷積過的特徵圖 (convolutional feature map)…
-
卷積層(Conv2D)參數設定
Continue Reading…: 卷積層(Conv2D)參數設定卷積層(Conv2D)介紹 以下為官方介紹連結: https://keras.io/api/layers/convolution_layers/convolution2d/ 參數介紹 參數 常用參數 filters:指定層中濾波器(也稱為卷積核)的數量。通常,增加濾波器的數量可以提高模型的表現,但也會增加計算複雜度。 kernel_size:指定濾波器的大小。濾波器的大小越大,模型可以捕捉到的特徵就越大,但也會增加計算複雜度。 strides:指定濾波器在輸入數據集上的步長。步長越大,模型就會捕捉到越少的特徵,但也會減少計算複雜度。 padding:指定是否對輸入數據集進行 padding。如果選擇 padding,則會在輸入數據集的周圍填充一圈 0,以便濾波器可以捕捉到輸入數據集的邊界特徵。 在設定這些參數時,需要考慮模型的複雜度和需要的特徵。例如,如果輸入數據集很大,且需要捕捉較大的特徵,那麼可能需要使用較大的濾波器和較大的步長。如果輸入數據集較小,且需要捕捉較多的細節,那麼可能需要使用較小的濾波器和較小的步長。 還可以嘗試使用不同的 padding 方式來控制輸入數據集的大小。例如,如果你使用「same」padding,則輸出數據集的大小將與輸入數據集的大小相同;如果你使用「valid」padding,則輸出數據集的大小將比輸入數據集的大小小。
-
如何提高機器學習的準確率
Continue Reading…: 如何提高機器學習的準確率提高準確率的方向 可以考慮用以下幾個方式來提高準確率: 增加訓練數據:模型訓練的資料越多,模型就有更多的資訊來學習,因此準確率往往會提高。 調整超參數:你可以調整超參數(例如學習率、損失函數、正則化項等)來提高模型的準確率。 改變模型結構:你可以增加或刪減模型中的層數、增加每層的神經元數量,或者使用不同的激活函數來改變模型的結構。 訓練更長時間:模型訓練的時間越長,模型就有更多的時間來學習,因此準確率往往會提高。 使用不同的模型:你可以試試不同的模型結構,例如殘差網路或卷積神經網路,看看哪個模型的準確率更高。 數據資料的準備 請見我的另一篇文章: 準備數據集資料的方針 調整超參數 超參數是指在訓練模型時不能由模型自動學習的參數。它們通常會影響模型的性能,因此在訓練模型時需要手動設置。 一些常見的超參數包括: 學習率:決定了模型在訓練過程中更新權重的速度。 損失函數:決定了模型在訓練過程中最小化的目標函數。 正則化項:決定了模型在訓練過程中對過擬合的懲罰力度。 批量大小:決定了模型在訓練過程中每次更新權重時使用的樣本數量。 設置超參數的方法有很多,其中常見的方法包括網格搜索和隨機搜索。 網格搜索是指對每個超參數設置一組固定的值,然後枚舉所有可能的組合來尋找最佳超參數。 隨機搜索則是隨機設置超參數的值,然後找出準確率最高的超參數組合。 也可以使用自動調參工具,例如 Hyperopt 或 Optuna,來幫助你設置超參數。這些工具可以自動幫你調整超參數,以便找到最佳的超參數組合。 使用TensorFlow Tuner 對一個模型的參數進行調優 使用網格搜索調整超參數 網格搜索是一種超參數調整方法,它可以幫助我們找到最佳的超參數組合。網格搜索的基本思路是,對於每個超參數,設定一組固定的值,然後枚舉所有可能的超參數組合,最終找到最佳的超參數組合。 舉例來說,假設有一個模型,需要調整兩個超參數:學習率和正則化率。可以設定學習率的可能取值為 0.1、0.01 和 0.001。然後,就會有九種可能的超參數組合: 學習率:0.1,正則化率:0.1 學習率:0.1,正則化率:0.01 學習率:0.1,正則化率:0.001 學習率:0.01,正則化率:0.1 學習率:0.01,正則化率:0.01 學習率:0.01,正則化率:0.001 學習率:0.001,正則化率:0.1…
-
準備數據集資料的方針
Continue Reading…: 準備數據集資料的方針如何準備數據集 使用質量高的資料,如: 清晰的圖像: 圖像清晰且無模糊或雜訊。 正確的標記: 圖像被正確地標記為相應的類別。 代表性的數據: 數據集中的數據能夠代表所有可能的輸入圖像,例如不同的角度、光線、尺寸等。 避免以下狀況: 模糊或不清晰的圖像: 圖像中有大量的模糊或雜訊。 錯誤的標記: 圖像被錯誤地標記為其他類別。 不代表性的數據: 數據集中的數據只代表一小部分可能的輸入圖像。 數據集要多少張才足夠 所需的圖片張數會視實際情況而會有所不同。例如,以撲克牌辨識為例,若數據集中只有每種牌的一種花色,或者您的數據集中可能有每種牌的多種花色,隨著分類的數量的增加,所需要的數據集規模也會隨之增加。 因此,在建立模型之前,需要先了解所要建構的數據集的結構,以確保使用的模型能夠正確地處理數據。 決定數據集大小需要考慮的因素有很多,因此無法給出一個硬性的準則。不過,通常而言,越多的訓練數據可以訓練出的模型表現越好。 然而,過多的訓練數據也可能會導致過擬合(overfitting)的問題,即模型對訓練數據表現良好,但對新數據的表現不佳。因此,在建立模型時,還需要考慮到模型的複雜度和訓練數據集的大小之間的平衡。 此外,訓練數據集的質量也很重要。如果您的數據集中有大量的標記錯誤或不清晰的圖像,那麼即使您的數據集很大,模型的表現也可能不佳。 因此,在確定數據集大小時,需要考慮許多因素,並嘗試找出最佳平衡。可以嘗試不同的數據集大小,並觀察模型的表現,以找出最佳的數據集大小。 若只是在測試模型階段,可以先嘗試使用少量的數據集來訓練模型。這可以幫助我們快速測試準備數據集的想法,並大致的了解模型的表現。 當確定了模型的結構和超參數後,可以考慮增加數據集的大小,以提高模型的準確度。因此,在建立模型時,建議先使用少量的數據集來確定模型的結構和超參數,然後再考慮增加數據集的大小。 所謂的少量,若只是測試階段,可以只需要幾百張圖像來確定模型的結構和超參數。但是,需要注意的是,模型的表現可能受到數據集質量的影響。即使數據集很小,如果數據集中的圖像質量很高,那麼模型的表現也可能很好。 可以嘗試使用以下數量的圖像: 少量數據集: 例如,您可以使用 100-200 張圖像來訓練模型。 中等數據集: 例如,您可以使用 1000-5000 張圖像來訓練模型。 大型數據集: 例如,您可以使用 10000 張或更多的圖像來訓練模型。 數據集數量算法: 如果我們要使用…
-
如何判讀訓練結果
Continue Reading…: 如何判讀訓練結果訓練過程 下面為一個epochs為10的訓練過程的log 機器學習結果判讀 如上圖,當我們下了model.fit開始跑機器學習後,會可以看到跑出下面這些資訊,這時候要如何解讀這些資訊呢? loss: 0.0337, accuracy: 0.9910, val_loss: 0.1509, val_accuracy: 0.9762 loss:指的是模型在訓練數據集上的損失。損失越低,代表模型的表現越好。 accuracy:指的是模型在訓練數據集上的準確率。準確率越高,代表模型的表現越好。 val_loss:指的是模型在驗證數據集上的損失。損失越低,代表模型的表現越好。 val_accuracy:指的是模型在驗證數據集上的準確率。準確率越高,代表模型的表現越好。 0.9762 的準確率可以說是相當不錯的,但是在某些應用中可能還不夠。例如,在自動駕駛應用中,準確率可能需要更高,因為一個錯誤的預測可能會導致嚴重的後果。 在這個結果的數據集中,準確率為 0.9762 ,其大約會有 2.38% 的錯誤率。 如果有 100 張圖片,則大約有 2.38 張圖片會被錯誤地預測。 學習效果不好的原因 如果模型在驗證數據集上的準確率低於實際準確率,那可能是因為以下原因: 驗證數據集不具有代表性: 如果驗證數據集中的數據與實際應用中的數據有很大的差異,那麼模型的驗證數據集上的準確率可能會低於實際準確率。 模型過度擬合: 如果模型在訓練數據集上的表現很好,但是在驗證數據集上的表現較差,那麼這可能是因為模型過度擬合了訓練數據集。過度擬合的模型往往在訓練數據集上表現較好,但是在沒有看過的數據集上表現較差。因此,可嘗試增加數據集的大小或使用正則化來減少模型的過度擬合。 模型訓練不足: 如果模型沒有被訓練足夠長的時間,那麼它的表現可能會不夠好。你可以增加訓練的 epoch 數,或者增加每個 epoch 中的訓練次數來幫助模型學習。…
-
Keras介紹
Continue Reading…: Keras介紹甚麼是Keras Keras是一個用Python編寫的開源神經網路庫,旨在快速實現深度神經網路,專注於使用者友好、模組化和可延伸性,除標準神經網路外,Keras還支援卷積神經網路和迴圈神經網路。包含許多常用神經網路構建塊的實現,例如層、目標、啟用功能、最佳化器和一系列工具,可以更輕鬆地處理圖像和文字資料。 Keras由純Python編寫而成並基於Tensorflow、Theano以及CNTK後端。Keras 為支持快速實驗而生,能夠把你的idea迅速轉換為結果,如果你有如下需求,請選擇Keras: 簡易和快速的原型設計(keras具有高度模塊化,極簡,和可擴充特性) 支持CNN和RNN,或二者的結合 無縫CPU和GPU切換 Keras建立模型的流程 載入數據集: 首先,您需要載入您要用來訓練模型的圖像數據集。您可以使用 Python 的數據讀取庫(如 pandas 或 numpy) 來讀取本地數據集,或者使用 Keras 自帶的數據集(如 MNIST 手寫數字數據集)。 將數據拆分為訓練集和測試集: 接下來,您需要將數據集拆分為訓練集和測試集。這樣可以幫助您評估模型的表現。通常,您會將大約 80% 的數據集用於訓練,剩餘的 20% 用於測試。 預處理數據: 在進行模型訓練之前,您需要對數據進行預處理。這可能包括將圖像大小轉換為相同的大小,標準化像素值等。 建立模型: 接下來,您可以使用 Keras 來建立模型。Keras 提供了許多不同的模型建構器(如 Sequential 或 functional API),您可以使用它們來建立不同類型的模型。在建立模型時,您需要考慮使用哪種模型類型(如卷積神經網絡或長短期記憶網絡)、使用哪些層類型(如卷積層、池化層、全連接層等),以及如何連接這些層。在決定模型結構時,您可以參考相關研究或嘗試不同的組合以找出最佳的模型結構。 編譯模型: 一旦您已經建立了模型,您需要使用 Keras…
Search
About Me
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!