目錄 0 環境 1 引言 2 思路 3 圖像分類 4 總結python
Python版本:3.6.8後端
系統版本:macOS Mojave網絡
Python Jupyter Notebook機器學習
七月了,你們最近必定被一項新的政策給折磨的焦頭爛額,那就是垃圾分類。《上海市生活垃圾管理條例》已經正式實施了,相信仍是有不少的小夥伴和我同樣,尚未徹底搞清楚哪些應該扔在哪一個類別裏。感受天天都在學習一遍垃圾分類,真使人頭大。函數
據說一杯沒有喝完的珍珠奶茶應該這麼扔 一、首先,沒喝完的奶茶水要倒在水池裏 二、珍珠,水果肉等殘渣放進溼垃圾 三、把杯子要丟入幹垃圾 四、接下來是蓋子,若是是帶蓋子帶熱飲(好比大部分的熱飲),塑料蓋是能夠歸到可回收垃圾的嗷學習
看到這裏,是否是你們忽然都不想喝奶茶了呢,哈哈。不過沒關係,垃圾分類雖然要執行,可是奶茶也能夠照喝。優化
那麼,這裏咱們想討論一下,人工智能和數據科學的方法能不能幫助咱們進行更好的垃圾分類?這樣咱們不用爲了避免知道要扔哪一個垃圾箱而煩惱。人工智能
這問題的解決思路或許不止一條。這裏只是拋磚引玉一下,提供一些淺顯的看法。blog
第一種方案,能夠把垃圾的信息製成表格化數據,而後用傳統的機器學習方法。圖片
第二種方案,把全部的垃圾分類信息作成知識圖譜,每一次的查詢就好像是在翻字典同樣查閱信息。
第三種方案,能夠藉助如今的深度學習方法,來對垃圾進行識別和分類。每次咱們給一張垃圾的圖片,讓模型識別出這是屬於哪種類別的:幹垃圾,溼垃圾,有害垃圾仍是可回收垃圾。
圖像分類是深度學習的一個經典應用。它的輸入是一張圖片, 而後通過一些處理,進入一個深度學習的模型,該模型會返回這個圖片裏垃圾的類別。這裏咱們考慮四個類別:幹垃圾,溼垃圾,有害垃圾仍是可回收垃圾。
<center>(報紙 :可回收垃圾 )</center>
<center>(電池 :有害垃圾 )</center>
<center>(一次性餐盒 :幹垃圾 )</center>
咱們對圖片裏的物品進行分類,這是圖像處理和識別的領域。人工智能裏提出了使用卷積神經網絡(Convolutional Neural Network, CNN)來解決這一類問題。
我會用keras包和Tensorflow後端來創建模型。 因爲訓練集的樣本暫時比較缺少,因此這裏只能先給一套思路和代碼。訓練模型的工做以前還得進行一波數據收集。
咱們就先來看看代碼大體長什麼樣吧
先導入一些必要的包。
再作一下準備工做。
在上面,咱們初始化了一些變量,batch size是128; num_classes = 4,由於須要分類的數量是4,有幹垃圾,溼垃圾,有害垃圾和可回收垃圾這四個種類。epochs 是咱們要訓練的次數。接下來,img_rows, img_cols = 28, 28 咱們給了圖片的緯度大小。
在 .reshape(60000,28,28,1)中 , 60000 是圖片的數量(可變), 28是圖片的大小(可調),而且1是channel的意思,channel = 1 是指黑白照片。 .reshape(10000,28,28,1)也是同理,只是圖片數量是10000。
到了最後兩行,咱們是把咱們目標變量的值轉化成一個二分類, 是用一個向量(矩陣)來表示。好比 [1,0,0,0] 是指幹垃圾,[0,1,0,0]是指溼垃圾等等。
接下來是建模的部分。
咱們加了卷積層和池化層進入模型。激活函數是 relu,relu函數幾乎被普遍地使用在了卷積神經網絡和深度學習。咱們在層與層之間也加了dropout來減小過擬合。Dense layer是用來作類別預測的。
建完模型後,咱們要進行模型的驗證,保證準確性在線。
到這裏,咱們的建模預測已經大概完成了。一個好的模型,要不斷地去優化它,提升精確度等指標要求,直到達到能夠接受的程度。
這優化的過程,咱們在這裏就先不深刻討論了,之後繼續。
值得一提的是,儘管方法上是有實現的可能,可是實際操做中確定要更復雜的多,尤爲是對精度有着很高的要求。
並且當一個圖片裏面包含着好幾種垃圾種類,這也會讓咱們的分類模型開發變得很複雜,增長了難度。
好比,咱們想要對一杯奶茶進行垃圾分類,照片裏面是包含了多個垃圾的種類,這就比較頭大了,由於這並非屬於單一的類別。
前路的困難確定是有的,不過就當這裏的分享是個拋磚引玉的起點吧。
畢竟李白也說了,「長風破浪會有時,直掛雲帆濟滄海」。
關注公衆號「Python專欄」,後臺回覆「垃圾分類2」獲取本文全套代碼。更多有意思的python等着你