發表文章

VGG16遷移學習(他山之石,可以攻玉)_分辨人和馬_使用 TensorFlow Keras 實作 VGG16 遷移學習_part1.圖檔格式轉換前處理&生成自訂數據集

圖片
絕大多數教科書或是網上課程、教學文章,都會是拿內建的toy dataset(鳶尾花、手寫字...等)在做CNN訓練分類。不過這十分不接地氣,真實場景是我們會有自己前處理過的圖像資料集,要怎麼把它封裝成tensorflow可以讀取的dataset格式,是我們需掌握的基礎。 這邊就拿這個二元分類的資料集做一個示範筆記 Horses Or Humans Dataset https://www.kaggle.com/datasets/sanikamal/horses-or-humans-dataset 資料集包含 500 張以不同姿勢、出現在不同地點的各類馬匹物種渲染影像,另包含 527 張以不同姿勢、出現在不同地點的人物渲染影像。 資料集特別納入男性與女性,以及亞洲人、黑人、南亞裔與白人。驗證集則新增 6 位性別、族裔與姿勢各異的人物,以確保資料涵蓋範圍廣泛。 人、馬影像大小是300x300x4(RGBA四個通道)的png圖檔 遷移學習(Transfer Learning)是一種機器學習技術,將你在「某個任務或領域」學到的知識和權重,拿來應用到「另一個相關但不同」的新任務上。 「他山之石,可以攻玉。」 這名句最早出自《詩經·小雅·鶴鳴》,意思是別的山上的石頭,能夠用來打磨玉器或用來製成加工玉石的磨石。既比喻別國的賢才可為本國效力,也比喻能幫助自己改正缺點的人或意見。遷移學習正是如此,透過借用其他模型已經學習到的知識,幫助新模型更有效率地完成新的分類任務。 以下是VGG16原本的神經網路架構,整個神經網路都只使用了1x1、3x3的卷積核。 採用了16層(分別為13個卷積層和3個全連接層)。 在VGG中,所有使用的卷積、池化的配置都統一固定。 卷積配置:3×3的卷積核,填滿1,stride:1 池化配置:2×2的池化窗口,stride:2,池化方式:max  。 所有隱藏層的激活函數都採用ReLU函數。 https://datahacker.rs/deep-learning-vgg-16-vs-vgg-19/ 3x224x224影像輸入 Convolutional Blocks可分為C1、C2、C3、C4、C5 Fully Connected Layers可分為F6、F7、F8。 C1. conv(3,64)->ReLu->conv(64,64)->...

cuDNN下載安裝教學

圖片
  https://brian-liu.medium.com/build-enviroment-cuda-cudnn-on-win11-6ac5e51268f3 接續前一篇 關於GPU顯卡TFLOPS指標介紹和CUDA Toolkit下載安裝教學 裝完CUDA Toolkit之外還需要下載安裝cuDNN https://developer.nvidia.com/rdp/cudnn-archive 由於我這邊裝的版本是CUDA Toolkit 11.2.2 因此從最新版本cuDNN v8.9.7、cuDNN v8.9.5、.....只要有匹配的CUDA 11.x都可以下載安裝 不然預設你的本地電腦Tensorflow程式,是無法啟用到GPU資源的。 Python測試腳本 import tensorflow as tf print ( "TensorFlow:" , tf . __version__ ) gpus = tf . config . list_physical_devices ( "GPU" ) print ( "Detected GPU:" , gpus ) print('GPU->',tf.test.is_gpu_available()) if gpus : try : for gpu in gpus : tf . config . experimental . set_memory_growth ( gpu , True ) with tf . device ( "/GPU:0" ): a = tf . random . normal (( 512 , 512 )) b = tf . matmul ( a , a ) print ( "GPU calculation:" , b . device ) print ( "GPU test: PASS" ) except Exception as ...

關於GPU顯卡TFLOPS指標介紹和CUDA Toolkit下載安裝教學

圖片
CUDA 是 NVIDIA 的 GPU 技術,讓開發者運用並管理 NVIDIA GPU 大規模平行運算能力的技術與程式設計模型。電腦本身一定要是Nvida的顯卡才能裝CUDA。 但 CUDA 本身不等於平行處理,平行處理是一種概念;CUDA 則提供技術與程式設計模型,幫助開發者使用並管理 GPU 的運算資源。 CPU 能運算大量資料,但資源較少: CPU 可以處理數百萬甚至數十億次計算,只是執行資源相對有限,因此大量工作可能耗時較久。至於GPU 則相對擅長大量同類型計算,GPU 應用廣泛,但需要有效調度。涵蓋到遊戲、科學模擬、人工智慧與影像處理等工作都需要大量計算。 一般市面上顯卡,會用 TFLOPS(Tera Floating Point Operations Per Second) 這個指標來衡量GPU浮點運算能力。代表每秒可以執行多少萬億(10^12)次浮點運算。 常見的浮點數精度有半精度(FP16)、單精度又被稱作全精度(FP32、TF32)、雙精度(FP64),基本上分別代表16位浮點數、32位浮點數、64位浮點數。在計算機科學中,浮點數的儲存方式主要是由三個部分所組成,分別是符號位元(sign)、指數位元(exponent)和小數位元(fraction, 理解成小數點後的數),可以參照 IEEE 754 。 以固定FP32指標來看 像是2016年 NVIDIA GeForce GTX 1050顯卡 ,只支援到1.862 TFLOPS 到了2020年 NVIDIA GeForce RTX 3070 ,短短四年時間就支援到20.31 TFLOPS。 2022年10月的 NVIDIA GeForce RTX 4090 ,則已經能支援高達82.58 TFLOPS。 2025年1月的 NVIDIA GeForce RTX 5090 ,又進步到了能支援104.8 TFLOPS。 從 NVIDIA GPU 的 FP32(32 位元單精度浮點運算)理論運算效能來看,2016 年 GeForce GTX 1050 僅有 1.862 TFLOPS,到了 2025 年 GeForce RTX 5090 已提升至 104.8 TFLOPS,短短 9 年間,理論運算能力成長約 56.3 倍,從中即可得知 GPU 硬體運算效能有顯著進步。 CUDA 提供多種運算管理功能,包括程式設...