I'm a mother of two precious kids and a professional programmer.
我的新書AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題的教材投影片已製作完成
歡迎各位有需要的教師和博碩文化索取教材
卷積神經網路CNN 卷積神經網路(Convolutional Neural Network,簡稱 CNN)是一種專門用於圖像處理的神經網路。它包含許多卷積層和池化層,可以捕捉圖像中的空間關係和細節。 卷積層: Conv2D (tf.keras.layers.Conv2D),使用一個卷積核來提取圖片特徵 池化層: MaxPooling2D (tf.keras.layers.MaxPooling2D),通過計算輸入圖像的不同區域的最大值或平均值來進行池化 卷積層(Conv2D) 使用一個卷積核來提取圖片特徵。 以下為其參數設定的介紹: 卷積層(Conv2D)參數設定 卷積層中的每個神經元都有一個濾波器(也稱為卷積核),用來提取圖像的特徵。每個濾波器都有一個指定的大小和深度,並且會在輸入圖像的不同區域進行卷積運算。例如,如果濾波器的大小為 3×3,且深度為 16,則每個濾波器都會提取 3×3 的區域中深度為 16 的特徵。 以下為其計算方法的簡單範例 當有部分的卷積核超出圖片範圍時,有兩種方法去解決: 1.…
卷積層(Conv2D)介紹 以下為官方介紹連結: https://keras.io/api/layers/convolution_layers/convolution2d/ 參數介紹 參數 常用參數 filters:指定層中濾波器(也稱為卷積核)的數量。通常,增加濾波器的數量可以提高模型的表現,但也會增加計算複雜度。 kernel_size:指定濾波器的大小。濾波器的大小越大,模型可以捕捉到的特徵就越大,但也會增加計算複雜度。 strides:指定濾波器在輸入數據集上的步長。步長越大,模型就會捕捉到越少的特徵,但也會減少計算複雜度。 padding:指定是否對輸入數據集進行 padding。如果選擇 padding,則會在輸入數據集的周圍填充一圈 0,以便濾波器可以捕捉到輸入數據集的邊界特徵。 在設定這些參數時,需要考慮模型的複雜度和需要的特徵。例如,如果輸入數據集很大,且需要捕捉較大的特徵,那麼可能需要使用較大的濾波器和較大的步長。如果輸入數據集較小,且需要捕捉較多的細節,那麼可能需要使用較小的濾波器和較小的步長。 還可以嘗試使用不同的 padding 方式來控制輸入數據集的大小。例如,如果你使用「same」padding,則輸出數據集的大小將與輸入數據集的大小相同;如果你使用「valid」padding,則輸出數據集的大小將比輸入數據集的大小小。
提高準確率的方向 可以考慮用以下幾個方式來提高準確率: 增加訓練數據:模型訓練的資料越多,模型就有更多的資訊來學習,因此準確率往往會提高。 調整超參數:你可以調整超參數(例如學習率、損失函數、正則化項等)來提高模型的準確率。 改變模型結構:你可以增加或刪減模型中的層數、增加每層的神經元數量,或者使用不同的激活函數來改變模型的結構。 訓練更長時間:模型訓練的時間越長,模型就有更多的時間來學習,因此準確率往往會提高。 使用不同的模型:你可以試試不同的模型結構,例如殘差網路或卷積神經網路,看看哪個模型的準確率更高。 數據資料的準備 請見我的另一篇文章: 準備數據集資料的方針 調整超參數 超參數是指在訓練模型時不能由模型自動學習的參數。它們通常會影響模型的性能,因此在訓練模型時需要手動設置。 一些常見的超參數包括: 學習率:決定了模型在訓練過程中更新權重的速度。 損失函數:決定了模型在訓練過程中最小化的目標函數。 正則化項:決定了模型在訓練過程中對過擬合的懲罰力度。 批量大小:決定了模型在訓練過程中每次更新權重時使用的樣本數量。 設置超參數的方法有很多,其中常見的方法包括網格搜索和隨機搜索。 網格搜索是指對每個超參數設置一組固定的值,然後枚舉所有可能的組合來尋找最佳超參數。 隨機搜索則是隨機設置超參數的值,然後找出準確率最高的超參數組合。 也可以使用自動調參工具,例如 Hyperopt 或 Optuna,來幫助你設置超參數。這些工具可以自動幫你調整超參數,以便找到最佳的超參數組合。 使用TensorFlow…
如何準備數據集 使用質量高的資料,如: 清晰的圖像: 圖像清晰且無模糊或雜訊。 正確的標記: 圖像被正確地標記為相應的類別。 代表性的數據: 數據集中的數據能夠代表所有可能的輸入圖像,例如不同的角度、光線、尺寸等。 避免以下狀況: 模糊或不清晰的圖像: 圖像中有大量的模糊或雜訊。 錯誤的標記: 圖像被錯誤地標記為其他類別。 不代表性的數據: 數據集中的數據只代表一小部分可能的輸入圖像。 數據集要多少張才足夠 所需的圖片張數會視實際情況而會有所不同。例如,以撲克牌辨識為例,若數據集中只有每種牌的一種花色,或者您的數據集中可能有每種牌的多種花色,隨著分類的數量的增加,所需要的數據集規模也會隨之增加。 因此,在建立模型之前,需要先了解所要建構的數據集的結構,以確保使用的模型能夠正確地處理數據。 決定數據集大小需要考慮的因素有很多,因此無法給出一個硬性的準則。不過,通常而言,越多的訓練數據可以訓練出的模型表現越好。 然而,過多的訓練數據也可能會導致過擬合(overfitting)的問題,即模型對訓練數據表現良好,但對新數據的表現不佳。因此,在建立模型時,還需要考慮到模型的複雜度和訓練數據集的大小之間的平衡。 此外,訓練數據集的質量也很重要。如果您的數據集中有大量的標記錯誤或不清晰的圖像,那麼即使您的數據集很大,模型的表現也可能不佳。 因此,在確定數據集大小時,需要考慮許多因素,並嘗試找出最佳平衡。可以嘗試不同的數據集大小,並觀察模型的表現,以找出最佳的數據集大小。 若只是在測試模型階段,可以先嘗試使用少量的數據集來訓練模型。這可以幫助我們快速測試準備數據集的想法,並大致的了解模型的表現。 當確定了模型的結構和超參數後,可以考慮增加數據集的大小,以提高模型的準確度。因此,在建立模型時,建議先使用少量的數據集來確定模型的結構和超參數,然後再考慮增加數據集的大小。 所謂的少量,若只是測試階段,可以只需要幾百張圖像來確定模型的結構和超參數。但是,需要注意的是,模型的表現可能受到數據集質量的影響。即使數據集很小,如果數據集中的圖像質量很高,那麼模型的表現也可能很好。…
訓練過程 下面為一個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…
甚麼是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%…
可以使用 OpenCV 的 cv2.getRotationMatrix2D() 函數來生成旋轉矩陣,然後使用 cv2.warpAffine() 函數將圖像旋轉。 請注意,旋轉角度是以逆時針方向為正的。例如,如果要將圖像逆時針旋轉 90 度,則角度值應設為 90。 此外,如果你想要在旋轉圖像時保留圖像的邊界,你可以使用 cv2.warpAffine() 函數的 borderValue參數來設置(255,255,255)。這樣會將旋轉後圖像的邊界填充為白色。
可以使用 OpenCV 的 cv2.convertScaleAbs() 函數來增亮圖像。這個函數會將圖像的每個像素值乘上一個指定的比例因子並加上一個常數,以此來調整圖像的亮度。 請注意,這個函數可能會導致圖像中的一些像素值超出 0 到 255 的範圍,因此你可能需要在函數末尾使用new_image = np.where(new_image > 255, 255, new_image)來將這些像素值限制在合法範圍內。
OpenCV 的 cv2.addWeighted() 函數可用來實現圖像增量。 這個函數有三個輸入參數: src1: 第一個輸入圖像,應該是第一幅圖像的數組。 alpha: 一個浮點數,用於決定第一幅圖像在輸出圖像中的權重。 src2: 第二個輸入圖像,應該是第二幅圖像的數組。 此函數返回值為加權的結果,其中第一幅圖像的權重為 alpha,第二幅圖像的權重為 1-alpha。 例如,假設你想要將第一幅圖像的 50% 与第二幅圖像的 50%相加,你可以使用以下代碼: PS: 在使用 cv2.addWeighted() 函數時,兩幅圖像的大小必須相同,否則會出現錯誤。
甚麼是虛擬環境 虛擬環境 (virtual environment) 是一個隔離的 Python 環境,可以讓您在同一台電腦上安裝不同版本的 Python 套件,或是不同專案之間使用不同的套件版本。 使用虛擬環境可以幫助您避免不同專案之間因為套件版本不同而造成的衝突。例如,如果您有兩個專案,一個專案需要使用舊版本的套件,而另一個專案需要使用新版本的套件,您可以在兩個專案中分別建立兩個虛擬環境,並在每個虛擬環境中安裝所需的套件版本。這樣就可以避免在不同專案中使用不同版本的套件造成的衝突。 虛擬環境還可以讓您在不影響全域環境的情況下,安裝、卸載或更新套件。這對於在測試某些套件時特別有用,因為您可以在虛擬環境中安裝或卸載套件,而不用擔心會對全域環境造成影響。 總的來說,虛擬環境可以讓您更輕鬆地在同一台電腦上進行多個 Python 專案的開發,並且可以有效地隔離不同專案之間的套件版本。 於Windows建立虛擬環境 要建立新的虛擬環境,請選擇 Python 解譯器,並建立用來存放的 .\venv 目錄: 啟動虛擬環境: 在不影響主機系統設定的情況下,在虛擬環境中安裝套件。首先,請升級 pip: 之後再離開虛擬環境: 於macOS建立虛擬環境…
17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。
如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!