色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AI從入門到放棄:用MLP做圖像分類識別

MqC7_CAAI_1981 ? 來源:未知 ? 作者:胡薇 ? 2018-07-09 10:09 ? 次閱讀

▌一、前言

閱讀本文的基礎:我會認為你對BP神經網絡有充分的了解,熟讀過我上一篇文章,本文會大量引用上一篇文章的知識以及代碼。上一篇筆記的傳送門:《AI從入門到放棄:BP神經網絡算法推導及代碼實現筆記》

▌二、用MLP做圖像分類識別?

在沒有CNN以及更先進的神經網絡的時代,樸素的想法是用多層感知機(MLP)做圖片分類的識別,沒毛病。作為上篇筆記學習的延續,以及下一篇CNN的藥引,使用MLP來做圖片分類識別,實在是個不錯的過度例子。通過這個例子,從思路上引出一系列的問題,我不賣關子,自問自答吧,即:MLP能做圖片分類識別嗎?--> 答案是是可以的,上一篇我們是擬合非線性分類函數,這里是擬合圖像特征,數學本質沒區別。

MLP做這個事情效果如何?--> 個人認知內,只能說一般一般。MLP在這一領域效果一般,是有什么缺陷嗎? --> 缺陷是有的,下文會詳細說。有更好的解決方案嗎? --> 那也是必須有的,地球人火星人喵星人都知道有CNN等等更先進的東東;但是在沒有這些東西存在的時代,你發明出來了,那才真是666。

▌三、先上車

1. 數據源

數據源當然是圖片,但是是經過數據化處理的圖片,使用的是h5文件。h5文件簡單說就是把數據按索引固化起來,挺簡單的不多說,度度一下:

h5py入門講解:

https://blog.csdn.net/csdn15698845876/article/details/73278120

我們有3個h5文件,存著不重復的圖片數據,分別是:

train_catvnoncat.h5 (用來訓練模型用的,一共有209張,其中有貓也有不是貓的圖片,尺寸64*64像素)

test_catvnoncat.h5 (用來測試模型準確度的,一共有50張圖片,,其中有貓也有不是貓的圖片,尺寸64*64像素)

my_cat_misu.h5 (用來玩的,我家貓主子的1張照騙,尺寸64*64像素)

2. 數據結構

拿train_catvnoncat.h5舉例,這個文件有2個索引:

train_set_x:這是一個數組,因為是209張圖片,所以數組長度是209。數組中的元素是一個 64*64*3 的矩陣。64*64是圖片像素尺寸,3是什么鬼?別忘了這是彩色圖片,3就是代表RGB這3個顏色通道的值。

train_set_y:圖片標簽數組,長度也是209,是209張圖片的標簽(label),對應數組下標的值是1時,代表這張圖片是喵星人,0則代表不是。

同理,test_catvnoncat.h5 中有 test_set_x 和 test_set_y;my_cat_misu.h5 中有 mycat_set_x 和 mycat_set_y

3. 告訴你怎么制作圖片的h5文件,以后做cnn等模型訓練時,非常有用

以我主子為例子:

原圖:

自己處理成64*64的圖片,當然你也可以寫代碼做圖片處理,我懶,交給你實現了:

python代碼,用到h5py庫:

defsave_imgs_to_h5file(h5_fname,x_label,y_label,img_paths_list,img_label_list):#構造n張圖片的隨機矩陣data_imgs=np.random.rand(len(img_paths_list),64,64,3).astype('int')label_imgs=np.random.rand(len(img_paths_list),1).astype('int')#plt.imread可以把圖片以多維數組形式讀出來,然后我們存成n*n*3的矩陣foriinrange(len(img_paths_list)):data_imgs[i]=np.array(plt.imread(img_paths_list[i]))label_imgs[i]=np.array(img_label_list[i])#創建h5文件,按照指定的索引label存到文件中,完事了f=h5py.File(h5_fname,'w')f.create_dataset(x_label,data=data_imgs)f.create_dataset(y_label,data=label_imgs)f.close()returndata_imgs,label_imgs#用法#圖片label為1代表這是一張喵星人的圖片,0代表不是save_imgs_to_h5file('datasets/my_cat_misu.h5','mycat_set_x','mycat_set_y',['misu.jpg'],[1])

4. 看看我的數據源的樣子

用來訓練的圖片集合,209張:

用來校驗模型準確度的圖片集合, 50張

用來玩的,主子照騙,1張:

▌四. 開車了

1. 如何設計模型:

輸入層:我們的圖片是64*64的像素尺寸,那么算上RGB三個通道的數據,我們把三維矩陣拉成面條 64*64*3 = 12288。 也就是我們輸入層的數據長度是12288。

隱藏層:使用多層隱藏層,可以自行多嘗試一下不同的結構。這里我使用3個隱藏層,隱藏層神經元個數分別是20,7,5

輸出層:我們的目標就是判斷某張圖片是否是貓而已,所以輸出層1個神經元,輸出概率大于0.5認為是貓,小于等于0.5認為不是。

【插播】:有人會想,第一層隱藏層的神經元和輸入層數量一致是不是會好點?理論上是會好點,但是這涉及到MLP的一個缺陷,因為全連接情況下,這樣做,第一層的權重w參數就有1228的平方個,約為1.5個億。如果圖片更大呢?參數會成指數級膨脹,后果盡情想象。

2. 如何訓練模型

還用說,把209張圖片的數據扔到神經網絡,完成一次迭代,然后訓練1萬次,可自行嘗試迭不同代次數觀察效果。

3. 如何衡量模型的準確度

大神吳恩達(Andrew Ng)提到的方法之一,就是劃分不同集合,一部分用來訓練,一部分用來驗證模型效果,這樣可以達到衡量你所訓練的模型的效果如何。所以我們訓練使用209張圖片,最終使用50張測試模型效果。

為了好玩,可以自己用不同圖片通過模型去做分類識別。

▌五. 老規矩,甩代碼

還是說明一下代碼流程吧:

代碼使用到的 NeuralNetwork 是我上一篇筆記的代碼,實現了BP神經網絡,import進來直接用即可。

代碼做的事情就是:

從h5文件加載圖片數據

把原始圖片顯示出來,同時也保存成圖片文件

訓練神經網絡模型

驗證模型準確度

把識別結果標注到原始圖片上,同時也保存成圖片文件

▌六.結論

1. 神經網絡模型的輸出結果,標注到了圖片上并展示出來,規則是:

結果展示說明:

【識別正確】:原圖是貓,識別為貓 --> 原圖顯示原圖不是貓,識別為不是貓 --> 降低顯示亮度【識別錯誤】:原圖是貓,但是識別為不是貓 --> 標紅顯示原圖不是貓, 但是識別成貓 --> 標紅顯示

圖片標題會顯示Accuracy(準確度),準確度的計算公式是: 識別正確圖片數/圖片總數。

2. 模型訓練完成后,把訓練用的209張圖片用訓練好的模型識別一遍,觀察結果:可以看到,迭代1w次的模型,識別訓練圖集,準確度是 100% 的:

3. 模型訓練完成后,使用測試圖集用訓練好的模型識別一遍,觀察結果:可以看到,迭代1w次的模型,識別訓練圖集,準確度只有 78%:

4. 看看模型能不能認出我主子是喵星人,看樣子,它是認出來了:

▌七.對結果進一步分析,引出一系列問題

拋出一個問題:為什么用測試圖集驗證模型,識別率只有78%?在我嘗試過改變神經網絡結構設計,參數調參后,仍然無法提高識別率,為什么呢?

不算徹底的解答:

也許是我水平有限,調參姿勢不對?姿勢帥并不是萬能的,我們應該從更深層次的原理進行分析。

有人說,你訓練數據少了,好像有那么些道理。其實是可以給模型輸入更多圖片的特征是個不錯的辦法,比如旋轉一下,圖片內容放大縮小,挪挪位置等。但是Andrew Ng也說過,過分追求訓練數據收集是一條不歸路。

在同等訓練數據集下,有更好的辦法嗎?由此引出下一個問題。

刨根問底:想要知道為什么MLP識別度難以做到很高,撇開網絡結構,調參,訓練數據先不談。我們應該從MLP身上找找茬。搞清楚我們目標,是提高對圖片進行分類識別,那么在使用MLP實現這個目標時,它自身是否有缺陷,導致實現這個目標遇到了困難。那么解決了這些困難,就找到了解決問題的方法。

MLP在做圖片分類識別的缺陷:神經元是全連接的方式構成的神經網絡,全連接情況下,假設圖片是1k*1k像素大小,那么隱藏層個數和輸入層尺寸一致時,不考慮RGB顏色通道,單通道下,權重w參數個數會是:(沒數錯0的話)

如果圖片再大點,參數膨脹到不可想象,直接導致的負面效果是:

參數過多,計算量龐大

全連接情況下,過深的網絡容易導致梯度消失,模型難以訓練

MLP全連接的情況下,無法做到圖片的形變識別。怎么理解這個詞呢,拿手寫數字舉個例子,比如寫8,每個人書寫習慣不一樣,有的人寫的很正,但有的人寫歪了點,上半部分小,下半部分大,等等。這時候,MLP的缺點就顯現出來了,同一張圖片,旋轉,或者稍微平移形變一下,它無法識別。你可以通過增加更多特征給模型,但這不是本質上的解決該問題的方法,而是對訓練的優化手段。

▌八. 總結要解決的問題,離下一個坑就不遠了

上面已經列舉了要解決的幾個問題,這里總結一下:

我們要解決參數膨脹帶來的計算量龐大的問題。

優化參數量之后,如何在同等訓練數據集不變的情況下,如何提取更多特征。

在輸入有一定的旋轉平移伸縮時,仍能正確識別。

能解決以上問題的眾所周知,就是CNN以及眾多更先進的神經網絡模型了。本文作為一篇引子文章,也是CNN的導火索。代碼在你手中,把第一層隱藏層設計成和輸入層一樣大,即 layers_dims = [12288, 12288, 20, 7, 5, 1]。還只是64*64的小圖片而已,那龜速,我和我的小破筆記本都不能忍啊。這也是為什么大神們發明CNN的原因之一吧!

AI從入門到放棄,這也只是滄海一粟,你怕了嗎?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像識別
    +關注

    關注

    9

    文章

    520

    瀏覽量

    38267
  • cnn
    cnn
    +關注

    關注

    3

    文章

    352

    瀏覽量

    22203

原文標題:AI從入門到放棄2:CNN的導火索,用MLP做圖像分類識別?

文章出處:【微信號:CAAI-1981,微信公眾號:中國人工智能學會】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【Pocket-RIO試用】LabVIEW FPGA開發入門放棄

    絲毫改觀,我是折騰不動了,本指望這玩意玩個LabVIEW FPGA開發入門精通,結果卻玩了個LabVIEW FPGA開發
    發表于 01-25 23:55

    微軟HoloLens正研發AI芯片 可識別語音和圖像

    使用這樣的芯片,來加速各自的 AI 任務,這一服務將于明年上線。用戶可以使用該服務巨大的數據中識別圖像,或使用機器學習算法預測用戶的購買模式。微軟研究院杰出工程師 Doug Burg
    發表于 07-31 21:17

    【HarmonyOS HiSpark AI Camera】基于圖像的手語識別機器人系統

    圖像,再把數字特征進行分類器模型預測,將預測結果以文本和語音形式展現出來。②把訓練模型進行裁剪量化部署IOT設備上,實現脫離電腦云,離線的情況下便捷的識別手語
    發表于 09-25 10:11

    【HarmonyOS HiSpark AI Camera】圖像采集識別

    項目名稱:圖像采集識別試用計劃:1.本人目前在做圖像處理識別,想用鴻蒙的開發板測試一下2.預期成果,開發出來一套圖像處理
    發表于 10-29 17:30

    科技周曦:我為什么放棄了語音識別,轉做人臉識別?精選資料推薦

    摘要:在多年研究之后,他為何放棄了語音識別,轉做人臉識別學術圈成立公司,他有哪些思考?如何更好地
    發表于 07-28 06:10

    STM32RTC實時時鐘實驗講解,入門放棄 精選資料分享

    STM32RTC實時時鐘實驗講解,入門放棄。文章目錄STM32RTC實時時鐘實驗講解,入門
    發表于 08-03 06:38

    STM32串口實驗,入門放棄 精選資料分享

    的博文,并加以歸納總結,幫助新手入門放棄 。提示:以下是本篇文章正文內容一、串口串口是什么?串口通信(Serial Communications)的概念非常簡單,串口按位(bit)
    發表于 08-03 06:17

    基于MLP的快速醫學圖像分割網絡UNeXt相關資料分享

    1、基于MLP的快速醫學圖像分割網絡UNeXt  方法概述  之前我們解讀過基于 Transformer 的 U-Net變體,近年來一直是領先的醫學圖像分割方法,但是參數量往往不樂觀,計算復雜,推理
    發表于 09-23 14:53

    【KV260視覺入門套件試用體驗】六、VITis AI車牌檢測&車牌識別

    車牌的圖像進行分析,最終截取出只包含車牌的一個圖塊的過程。這個步驟的主要目的是降低在車牌識別過程中的計算量,如果直接對原始的圖像進行車牌識別,會非常的慢,因此需要檢測的過程。 車牌
    發表于 09-26 16:28

    nios入門精通

    nios入門精通
    發表于 07-08 16:55 ?0次下載

    LabVIEW入門精通之模擬量輸入(AI)程序設計

    【LabVIEW入門精通】7.1 模擬量輸入(AI)程序設計(利用LabVIEW實現)
    發表于 01-08 11:25 ?0次下載

    MLP圖像分類識別

    大神吳恩達(Andrew Ng)提到的方法之一,就是劃分不同集合,一部分用來訓練,一部分用來驗證模型效果,這樣可以達到衡量你所訓練的模型的效果如何。所以我們訓練使用209張圖片,最終使用50張測試模型效果。
    的頭像 發表于 07-05 09:40 ?4178次閱讀

    STM32 IIC實驗講解,入門放棄

    STM32 IIC實驗講解,入門放棄。文章目錄STM32 IIC實驗講解,入門
    發表于 01-17 11:01 ?15次下載
    STM32 IIC實驗講解,<b class='flag-5'>從</b><b class='flag-5'>入門</b><b class='flag-5'>到</b><b class='flag-5'>放棄</b>。

    模擬矩陣在圖像識別中的應用

    訊維模擬矩陣在圖像識別中的應用主要是通過構建一個包含多種圖像數據的模擬矩陣,來訓練和測試深度學習模型,從而提高圖像識別的準確性和效率。 在圖像識別中,訊維模擬矩陣可以用來
    的頭像 發表于 09-04 14:17 ?576次閱讀
    模擬矩陣在<b class='flag-5'>圖像識別</b>中的應用

    AI大模型在圖像識別中的優勢

    大模型借助高性能的計算硬件和優化的算法,能夠在短時間內完成對大量圖像數據的處理和分析,顯著提高了圖像識別的效率。 識別準確性 :通過深度學習和計算機視覺技術,AI大模型能夠自動提取
    的頭像 發表于 10-23 15:01 ?604次閱讀
    主站蜘蛛池模板: 免费国产福利| 第七色 夜夜撸| 亚洲无码小格式| 午夜深情在线观看免费| 日本毛片久久国产精品| 亚洲精品久久区二区三区蜜桃臀| 美女内射少妇一区二区四区| 久久yy99re66| 精品手机在线1卡二卡3卡四卡| 国产三区在线成人AV| 国产高潮国产高潮久久久久久| 菠萝菠萝蜜视频在线看1| 99热精品在线视频观看| 18动漫在线观看| 最近中文字幕在线中文高清版| 在线中文字幕视频| 中文国产在线观看| 中文无码字慕在线观看| 在线看片福利无码网址| 在线日本高清日本免费| 0951影音在线| 99精品免费在线观看| 99久久全国免费久久爱| xxxxxl荷兰| 成人性生交大片免费看金瓶七仙女| 成人国产三级在线播放| 处初女处夜情视频在线播放| 搞基福利社| 国产精品一区二区在线观看 | 免费视频国产| 米奇在线8888在线精品视频| 棉签和冰块怎么弄出牛奶视频 | 百性阁论坛首页| 大香交伊人| 国产精品系列在线一区| 国产无遮挡又黄又爽在线视频 | 在线免费观看a视频| 777久久人妻少妇嫩草AV| www.久艹| 国产精品白浆精子流水合集| 国产真实强被迫伦姧女在线观看|