CNN-簡單圖片分類
原文連結:
假期的時候跟著專知的一個深度學習課程學習了一些深度學習的內容,也是愈發覺得神經網路十分神奇,最近看了一份簡單的圖片分類的CNN網路,記錄學習一下,從簡單學起~
大部分神經網路的基礎就不再寫了,網上也有很多介紹,這裡就照著程式碼,順一遍基本的使用方法~
簡略介紹
訓練樣本50張,分為3類:
- 0 => 飛機
- 1 => 汽車
- 2 => 鳥
圖片都放在data文件夾中,按照label_id.jpg進行命名,例如2_111.jpg代表圖片類別為2(鳥),id為111。
匯入相應庫
1 |
|
讀取資料
1 |
# 資料文件夾 |
這一部分程式碼主要就是實現將文件夾中的訓練樣本讀取出來,儲存在numpy陣列中。
定義placeholder(佔位符)
1 |
# 定義Placeholder,存放輸入和標籤 |
palceholder
可以將placeholder理解為一種形參吧,然後不會被直接執行,只有在呼叫tf.run方法的時候才會被呼叫,這個時候需要向placeholder傳遞引數。
函式形式:
1 |
tf.placeholder( |
dropout
dropout主要是為了解決過擬合的情況,過擬合就是將訓練集中的一些不是通用特徵的特徵當作了通用特徵,這樣可能會在訓練集上的損失函式很小,不過在測試的時候,就會導致損失函式很大。舉個例子吧,就像用一個網路來判斷這是不是一隻貓,而訓練集中的貓都是白色的,這樣就可能會導致整個網路將白色當作判斷貓的一個重要特徵,而測試集中的貓可能什麼顏色都有,這樣就會導致損失函式很大。
- 而dropout的解決方法就是在訓練的時候,以一定的機率讓部分神經元停止工作,這樣就可以減少特徵檢測器(隱層節點)間的相互作用,避免過擬合情況的發生。
- 測試時整合所有神經元
定義卷積神經網路(卷積層和pooling層)
1 |
# 定義卷積層, 20個卷積核, 卷積核大小為5,用Relu啟用 |
sigmoid與relu
- 在BP演算法中,反向傳播的過程是一個鏈式求導的過程(誤差透過梯度傳播),不過使用sigmoid函式,其中可能某一項的導數存在極小值,這樣就會導致整個偏導的導數值較小,導致誤差無法向前傳播,這樣的話,前幾層的引數無法得到更新。
- 不過relu函式就解決了這個問題啦
max-pooling
池化層有mean-pooling、max-pooling啥的。
pooling層主要是保留特徵,減少下一層的引數量和計算量,同時也能防止過擬合。
例如:max-pooling層的大小為2x2,那麼就會對一個2x2的畫素快進行取樣,得到這個小區域的最大值,並將這個值來代表這個區域塊傳遞到下一層中。
透過這樣的方式就可以來減少引數量和計算量,並且還保持某種不變性,包括translation(平移),rotation(旋轉),scale(尺度)
定義全連線部分
1 |
# 將3維特徵轉換為1維向量 |
全連線層,加上dropout,然後最後定義輸出層。
1 |
arg_max(a, axis= None, out= None) |
返回沿軸axis最大值的索引值,也就是最可能的標籤值。
定義損失函式和最佳化器
1 |
# 利用交叉熵定義損失 |
程式碼中的one_hot()函式的作用是將一個值化為一個機率分佈的向量,一般用於分類問題。然後再用reduce_mean()得到平均值。
執行階段
1 |
# 用於儲存和載入模型 |
這一部分程式碼感覺沒啥特別好寫的,大部分都寫在註釋裡了,而且一些寫法應該也是比較固定的,,,,
總結
可以看一下執行結果
感覺效果還是挺好的,真的挺神奇的。在這個過程中也是學習到了很多知識,這個整理總結歸納的過程也是收穫頗多,以後繼續加油~
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69946120/viewspace-2654834/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實現簡單的輪播圖(單張圖片、多張圖片)
- 攻防世界-簡單的圖片
- CNN-卷積神經網路簡單入門(2)CNN卷積神經網路
- 圖形影像處理之簡單圖片
- php 分頁 分頁類 簡單實用PHP
- 圖片雜亂無章、分享麻煩?HMS Core圖片分類服務教你快速篩選、分類、整合相簿
- 002.09 簡單 PNG 圖片編輯器
- Tensorflow2 自定義資料集圖片完成圖片分類任務
- 雲vps管理系統簡單分類
- tp寫簡單無限極分類
- JavaScript圖片簡單等比例縮放JavaScript
- Fresco圖片載入的簡單應用
- 圖片二次取樣簡單示例
- Bert文字分類實踐(一):實現一個簡單的分類模型文字分類模型
- 【Node】簡單快捷的圖片壓縮指令碼指令碼
- 安卓之viewPager簡單用法圖片輪播安卓Viewpager
- 如何簡單地把圖片轉換成文字?
- pytorch深度學習分類程式碼簡單示例PyTorch深度學習
- 【學習圖片】1.圖片簡史
- 使用jpeg圖片庫,顯示圖片並簡單實現LCD的觸屏功能
- 利用tesseract解析簡單數字驗證碼圖片
- 圖片處理擴充套件 Grafika 的簡單使用套件
- 常見形式 Web API 的簡單分類總結WebAPI
- PAT-B 1012 數字分類【簡單模擬】
- 圖片合成工具類(BitmapMergeUtils)
- Android兩種簡單的載入GIF圖片的方法Android
- PHP GD庫解析一張簡單圖片並輸出PHP
- 微信小程式簡單封裝圖片上傳元件微信小程式封裝元件
- 圖片處理擴充套件 Intervention/image 的簡單使用套件
- 1.CNN圖片單標籤分類(基於TensorFlow實現基礎VGG16網路)CNN
- 自動採集器分類批次解析淘寶評論圖片
- 【ML系列】簡單的二元分類——Logistic迴歸
- java 圖片水印處理類Java
- SpringMvc上傳圖片及表單提交(單檔案+實體類引數提交)SpringMVC
- (演算法競賽)簡單易懂二分圖演算法
- HTML5獲取圖片的原始高度簡單介紹HTML
- web前端入門到實戰:簡單的圖片輪播Web前端
- php 實現一個簡單的圖片邊緣檢測PHP