快訊!我的新書今天開始可以在天瓏網路書店預購啦!歡迎大家前往訂購!

 >>>> AI 職場超神助手:ChatGPT 與生成式 AI 一鍵搞定工作難題 <<<<

  • ,

    限制在Tensorflow跑模型時使用的GPU的記憶體上限?

    使用tensorflow-gpu結果耗一大堆MEMORY是為什麼 使用 TensorFlow GPU 版本會耗費較多的記憶體,這是正常的。因為 GPU 設備有自己的內存,我們可以使用 GPU 設備加速計算。但是,這意味著 GPU 設備的內存也必須足夠大,以便容納計算所需的資料。 如果GPU的記憶體不夠大,則tensorflow會改將原本要放在GPU的記憶體內的資料放到CPU的記憶體裡面,若是CPU的記憶體也不足夠大,則很有可能會導致程式死掉(因為記憶體不足夠) 改善方案 可考慮的改善方向有以下三點: 模型太大,超出了 GPU 設備的內存限制=>可以考慮使用更大的 GPU 設備或對模型進行優化,以減少模型的大小。(請參見: 如何縮小Tensorflow運算模型時使用的記憶體大小) 程式碼中存在記憶體泄漏。請檢查程式碼,確保正確釋放不再使用的記憶體。 GPU 設備的驅動程序版本過舊或損壞 其他方法 請參考這篇文章: https://starriet.medium.com/tensorflow-2-0-wanna-limit-gpu-memory-10ad474e2528 第一個選項:設置set_memory_growth為真。 第二個選項:將第一個 GPU 的內存使用量限制為 1024MB。gpus只需根據需要更改和的索引memory_limit即可。 我使用了第二個方法成功解決佔用太大記憶體的問題 使用Task Manager查看GPU使用狀況 使用 Windows 任務管理器檢查 GPU 設備的內存使用情況。要查看 GPU…

    Continue Reading…: 限制在Tensorflow跑模型時使用的GPU的記憶體上限?

  • ,

    如何縮小Tensorflow運算模型時使用的記憶體大小

    使用剪枝法 剪枝是一種常用的方法,用於縮小深度學習模型的大小。在剪枝過程中,可以刪除模型中不重要的權重,以縮小模型的大小。 以下是使用 TensorFlow 2.x 的簡單範例,說明如何在深度學習模型中進行剪枝: 訓練過程中使用正則化 正則化是一種常用的方法,用於防止過擬合,並縮小模型的大小。在 TensorFlow 中,您可以使用 tf.keras.regularizers 中的正則化函數,如 tf.keras.regularizers.l1 或 tf.keras.regularizers.l2,在網絡層中使用正則化。 使用較小的資料集進行訓練 如果資料集較大,則模型也會較大。因此,可以使用較小的資料集來訓練模型,以縮小模型的大小。 使用較少的運算計算。您可以使用較少的運算計算來縮小模型的大小。 例如,可以使用 1×1 卷積層來替代全卷積層預設值的3×3,或使用矩陣乘法來代替多重迴圈。 以下是使用 TensorFlow 2.x 的簡單範例,說明如何使用 1×1 卷積層來替代全卷積層的預設3×3的設定: 在這個範例中,我們在網絡中使用了三個卷積層,其中第一個和第三個使用 1×1 卷積核。這有助於縮小模型的大小,同時保留了運算計算的效率。 如果將 kernel_size 設為 (3, 3),則 TensorFlow 會將卷積核的高度設為 3,寬度設為 3。 因此將kernel_size…

    Continue Reading…: 如何縮小Tensorflow運算模型時使用的記憶體大小

  • ,

    tensorflow和keras版本之間不兼容的錯誤

    更多資訊請見: https://stackoverflow.com/questions/72255562/cannot-import-name-dtensor-from-tensorflow-compat-v2-experimental 編譯器的錯誤訊息 ImportError: cannot import name ‘dtensor’ from ‘tensorflow.compat.v2.experimental’ (C:\Users\user\.conda\envs\py392\lib\site-packages\tensorflow\_api\v2\compat\v2\experimental\__init__.py) stackoverflow提出的解決方法 tensorflow這可能是由於您和您的keras版本之間不兼容造成的。特別是我在tensorflow和keras中看到了這一點tensorflow==2.6.0,keras==2.9.0但如果其他版本也會導致這種情況,我也不會感到驚訝。 通過以下方式更新您的tensorflow版本: 或通過以下方式降級您的keras版本: 我的方法 重新建立一個新的tensorflow環境 參考這篇文章: 使用conda管理python版本和函式庫 用一個新的函式庫來跑tensorflow 並下載正確的套件,在最下方有一個列表: https://www.tensorflow.org/install/pip?hl=zh-tw#package-location conda create -n tf-gpu python=3.9.2 conda activate tf-gpu pip install –upgrade pip pip install tensorflow_gpu-2.6.0-cp39-cp39-win_amd64.whl 結果不行!! 最後還是照著上面的方法降版才OK

    Continue Reading…: tensorflow和keras版本之間不兼容的錯誤

  • ,

    使用GPU跑tensorflow的除錯流程

    最簡單的範例 這邊的程式碼是官網教學裡的一個簡單範例: https://www.tensorflow.org/tutorials/keras/classification?hl=zh-tw 使用GPU建模 經過了前三章的教學之後,應該已經設定好了Tensorflow的GPU環境 1. 在python裡面使用GPU 1 – 選擇適合的GPU 2. 在python裡面使用GPU 2 – 安裝正確的套件 3. 在python裡面使用GPU 3 – 開發GPU程式 接著就要嘗試使用GPU來建模,並評估和原本的效能有多大差異,現在就可以將上面的程式碼COPY下來,然後在有GPU的環境嚇跑看看 TensorFlow版本過舊的錯誤 AttributeError: module ‘tensorflow.python.util.dispatch’ has no attribute ‘add_fallback_dispatch_list’ 這個錯誤通常是因為您正在使用舊版本的 TensorFlow,而該版本中沒有 dispatch 模塊的 add_fallback_dispatch_list 屬性。 要解決此問題,建議您更新 TensorFlow 到最新版本。您可以使用 pip 升級…

    Continue Reading…: 使用GPU跑tensorflow的除錯流程

  • ,

    讓OpenCV支持GPU

    OpenCV CUDA https://opencv.org/platforms/cuda/ 現代 GPU 加速器已經變得強大且功能強大,足以執行通用計算 (GPGPU)。這是一個發展非常迅速的領域,引起了開發計算密集型應用程序的科學家、研究人員和工程師的極大興趣。儘管在 GPU 上重新實現算法存在困難,但許多人這樣做是為了檢查它們的速度。為了支持這些努力,許多高級語言和工具已經可用,例如 CUDA、OpenCL、C++ AMP、調試器、分析器等。 計算機視覺的重要組成部分是圖像處理,這是圖形加速器最初設計的領域。其他部分也假定大規模並行計算並且通常自然映射到 GPU 架構。因此,實現所有這些優勢並在圖形處理器上加速 OpenCV 具有挑戰性,但非常有益。 目標 在 GPU 上為開發者提供方便的計算機視覺框架,與當前 CPU 功能保持概念上的一致性。 使用 GPU 實現最佳性能(針對現代架構調整的高效內核、優化的數據流,如異步執行、複製重疊、零複製) 完整性(盡可能多地實施,即使加速不是很好;這樣可以完全在 GPU 上運行算法並節省應對開銷) 表現 使用範例 這兩個都是載入圖片的方法,上面的是載至CPU,而下方則是載至GPU img_Mat = cv2.imread(‘test.jpg’) # 16-bit float,

    Continue Reading…: 讓OpenCV支持GPU

  • ,

    在python裡面使用GPU 3 – 開發GPU程式

    GPU運算與CPU運算的不同 下面是GPU 和CPU 之間的一些主要區別: 運算單元:GPU 通常具有數百甚至數千個運算單元,而CPU 通常只有幾十個運算單元。 並行運算能力:由於GPU 具有更多的運算單元,它能夠同時處理更多的數據,因此在並行運算方面具有優勢。 計算能力:在單位時間內,GPU 的計算能力通常要高於CPU。 功耗:由於GPU 具有更多的運算單元,它的功耗通常比CPU 高。 用途:GPU 專門用於圖形處理,通常用於遊戲、視頻播放和圖形設計等任務。而CPU 則是計算機的中央處理器,負責處理各種計算任務。 指定使用的GPU 在程式中使用 GPU 時,需要在執行模型訓練或推理時將運算放在 GPU 上。您可以使用 TensorFlow 的 tf.device 函數指定運算的裝置。例如,您可以將運算放在第一個可用的 GPU 上: with tf.device(‘/gpu:0’): # 在這裡放置您的運算 pass 此外,可能需要注意 GPU 記憶體使用量。當您的模型變得越大,可能需要更多的 GPU 記憶體。可以使用 TensorFlow…

    Continue Reading…: 在python裡面使用GPU 3 – 開發GPU程式

  • ,

    機器學習所需的前置知識

    前置知識介紹 學習機器學習的前置知識包括: 數學基礎:學習機器學習需要具備良好的數學基礎,尤其是線性代數、微積分和概率論的基礎知識。 編程基礎:學習機器學習需要具備編程能力,至少應該熟悉一種編程語言,如 Python、C++ 或 Java。 算法基礎:了解常用的算法和數據結構,如排序算法、搜索算法、哈希表和二叉樹,將有助於學習機器學習中的算法。 機器學習基礎:了解機器學習的基本概念,如訓練集、測試集、模型和過擬合,有助於加深對機器學習的理解。 心理學基礎:了解心理學基礎知識,如信息加工理論和注意力機制,可以幫助我們更好地理解機器學習的應用。 當然,機器學習是一門涉及多個領域的學科,學習時可能還需要具備其他領域的知識,如統計學、計算機科學和人工智能等。 此外,學習機器學習時還需要具備一定的學習能力和探究精神,能夠獨立思考問題並尋找解決方案。建議您先了解機器學習的基本概念,並通過實踐來加深理解。可以嘗試解決一些練手的機器學習問題,或者參加一些在線的機器學習課程或比賽,來提升自己的機器學習能力。 微積分 微積分是計算數學的一個分支,主要研究連續的函數的求積、導數、極限的概念。在機器學習中,微積分的概念有助於我們理解和掌握梯度下降 (gradient descent) 算法,以及訓練神經網路的過程。 線性代數 線性代數是計算數學的一個分支,主要研究向量和矩陣的概念。在機器學習中,線性代數的概念有助於我們理解和掌握神經網路的運算過程,以及從數據中學習到有用信息的方法。 在線性代數中,還有許多其他概念,例如: 線性相關:多個向量是線性相關的,當且僅當它們可以由其他向量的線性組合表示。 基:向量空間的基是一组向量,它们的线性组合可以表示向量空间中的任何向量。 秩:向量空間的秩是指最多可以由多少个向量的线性无关组合表示出来。 線性無關:多個向量是線性無關的,當且僅當它們不能由其他向量的線性組合表示。 內積:向量的內積是指兩個向量的點積,可以用來度量兩個向量之間的夾角。 特徵向量:特徵向量是指線性轉換的特徵 信息加工理論和注意力機制 信息加工理論是心理學中一種用於描述人類心理信息加工過程的理論。它描述了人類大腦如何接收、處理、儲存和使用信息的過程。 根據信息加工理論,人類的大腦有三個基本的信息加工系統:感覺系統、認知系統和記憶系統。感覺系統負責接收外界信息,如視覺、聽覺、觸覺等,並將這些信息轉化成電信號傳遞給認知系統。認知系統負責對接收到的信息進行分析、比較、推理和決策,並將結果轉化成電信號傳遞給記憶系統。記憶系統負責存儲信息,並在需要時將信息重新取出。 注意力機制是指人類大腦如何選擇哪些信息應該被注意,哪些信息應該被忽略的過程。注意力是人類大腦加工信息的一種重要機制,它可以幫助我們過濾掉不重要的信息,專注於重要的信息。注意力可以由內部因素 (如情緒、動機和目標) 和外部因素 (如視覺、聽覺和触覺信息) 共同影響。 注意力機制在機器學習中也有重要作用。例如,在解決複雜的機器學習問題時,我們可能會面臨大量的信息和訓練數據,這時候需要注意力機制來幫助我們把重點放在最重要的信息和數據上。此外,注意力機制還可以用於解決模型過擬合問題,即讓模型更加關注訓練數據中的重要信息,而忽略噪聲和不重要的信息。 在機器學習中,注意力機制通常是通過注意力機制層 (attention layer) 實現的。注意力機制層是一種神經網絡層,它可以根據輸入數據的不同特徵,動態地分配注意力,從而更加精確地提取重要信息。注意力機制層已廣泛應用於機器翻譯、自然語言處理和計算機視覺等領域。

    Continue Reading…: 機器學習所需的前置知識

  • ,

    在python裡面使用GPU 2 – 安裝正確的套件

    前置作業 使用 GPU 來加速 Python 程式的運算需要: 電腦必須要有適合的 GPU 及相關驅動程式。 必須安裝支援 GPU 的 Python 程式庫,例如 TensorFlow、PyTorch 或 CuPy。 在使用這些程式庫時將運算指定給 GPU 執行 安裝Tensorflow GPU版本的函式庫 在上面幾步驟都安裝好之後,要確認自己所使用的函式庫是支援GPU的,一般來說,所有的函式庫都會分為【支持GPU版本】或者【針對CPU版本】。 所以要先確定自己所下載的函式庫是支持GPU的。如果你的環境之前已經安裝過CPU版本的該函式庫,建議新增另一個虛擬環境,讓新專案的函式庫能夠完全與CPU版本的程式分開 這邊是使用pip安裝tensorflow套件的流程:https://www.tensorflow.org/install/pip?hl=zh-tw 在最下方有一個列表https://www.tensorflow.org/install/pip?hl=zh-tw#package-location 若是想要直接確定要下載的版本,可從上面的列表下載.whl檔案,然後用以下指令套用 pip install tensorflow-apu-0.0.1-cp36-cp36m-linux_x86_64.whl 檢查有沒有Tensorflow 可用的GPU 可使用下面的程式來檢查 import tensorflow as tf print("TensorFlow version:", tf.__version__)…

    Continue Reading…: 在python裡面使用GPU 2 – 安裝正確的套件

  • ,

    在python裡面使用GPU 1 – 選擇適合的GPU

    選擇適用的GPU 在python裡面要使用GPU做運算,需要去呼叫GPU操作的方法來操作目標對象。 所以,能不能支持GPU運算,和套件本身有沒有開發針對該GPU操作的模組版本,是最為相關的。 對於python常用的模組,最廣泛有提供GPU操作版本的是針對nVidia裡的CUDA 深度神經網絡 (cuDNN) – cuDNN庫的支持。 nVidia cuDNN介紹 以下為官網的介紹 NVIDIA CUDA® 深度神經網絡庫 (cuDNN) 是一個 GPU 加速的深度神經網絡原語庫。cuDNN 為標準例程提供高度調整的實現,例如前向和反向卷積、池化、歸一化和激活層。 全球的深度學習研究人員和框架開發人員都依賴 cuDNN 來實現高性能 GPU 加速。它使他們能夠專注於訓練神經網絡和開發軟件應用程序,而不是將時間花在低級 GPU 性能調整上。 cuDNN 可加速廣泛使用的深度學習框架,包括Caffe2、Chainer、Keras、MATLAB、MxNet、PaddlePaddle、PyTorch和TensorFlow。要訪問已將 cuDNN 集成到框架中的 NVIDIA 優化深度學習框架容器,請訪問NVIDIA GPU CLOUD以了解更多信息並開始使用。 另外,因為原本的numpy並不支持GPU,因此有提供了Cupy,其接口高度雷同於numpy 在大多數情況下,它可以用作直接替代品。要做的只是在您的 Python 代碼中用CuPy換numpy。 例如: import…

    Continue Reading…: 在python裡面使用GPU 1 – 選擇適合的GPU

  • ,

    使用conda管理python版本和函式庫

    在CMD裡面使用conda 指出 Windows 命令提示符無法識別 conda 命令。這通常是因為您的系統沒有安裝 Anaconda 或 Miniconda 環境管理器,或者沒有將 Anaconda 或 Miniconda 的安裝路徑添加到系統的環境變量中。 將 Anaconda 的安裝路徑添加到系統的環境變量中 如果您的系統上沒有安裝,請前往 Anaconda 網站下載並安裝最新版本:https://www.anaconda.com/products/individual 錯誤訊息:’conda’ is not recognized as the name of a cmdlet 安裝完成後,若我們在下conda指令時出現如下錯誤 conda : The term ‘conda’ is not recognized as…

    Continue Reading…: 使用conda管理python版本和函式庫


17年資歷女工程師,專精於動畫、影像辨識以及即時串流程式開發。經常組織活動,邀請優秀的女性分享她們的技術專長,並在眾多場合分享自己的技術知識,也活躍於非營利組織,辦理活動來支持特殊兒及其家庭。期待用技術改變世界。

如果你認同我或想支持我的努力,歡迎請我喝一杯咖啡!讓我更有動力分享知識!