自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

機(jī)器學(xué)習(xí)零基礎(chǔ)?手把手教你用TensorFlow搭建圖像識(shí)別系統(tǒng)(一)

大數(shù)據(jù)
TensorFlow是機(jī)器學(xué)習(xí)的開(kāi)源軟件庫(kù),它由Google在2015年發(fā)布并很快成為全世界的研究者和學(xué)習(xí)者中最流行的機(jī)器學(xué)習(xí)庫(kù)之一。它在圖像分類模型中承擔(dān)重要作用。

[[182022]]

這是Wolfgang Beyer的一篇博文,詳細(xì)介紹了如何使用TensorFlow搭建一個(gè)簡(jiǎn)單的圖像識(shí)別系統(tǒng)。本篇主要介紹圖像識(shí)別和本試驗(yàn)中會(huì)遇到的一些概念。

如果你覺(jué)得這是一篇簡(jiǎn)單介紹人工智能、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的文章,那就錯(cuò)啦。你可以在網(wǎng)上搜羅到一大堆相關(guān)話題的文章,而這篇文章也并不是討論人工智能是否會(huì)奴役人類或搶走人們飯碗之類的話題,畢竟相關(guān)的各種推論和謠言已經(jīng)滿天飛了。

這只是一篇詳細(xì)描述如何開(kāi)始搭建一個(gè)機(jī)器學(xué)習(xí)系統(tǒng),并讓它可以識(shí)別所看到圖像的文章。

作者Wolfgang Beyer目前現(xiàn)在正在學(xué)習(xí)人工智能和機(jī)器學(xué)習(xí)的內(nèi)容。他認(rèn)為最好的學(xué)習(xí)方式不是僅僅閱讀各類材料,而是要真正地去動(dòng)手搭建一個(gè)系統(tǒng)。這就是雷鋒網(wǎng)翻譯本文的目的,也是作者要向你介紹的。在這篇文章中Beyer將向你展示如何搭建一個(gè)系統(tǒng),去完成一項(xiàng)簡(jiǎn)單的計(jì)算機(jī)視覺(jué)任務(wù):識(shí)別圖像內(nèi)容。

Beyer強(qiáng)調(diào),他并不是一個(gè)專家。“我正在學(xué)習(xí),而且還有很多東西需要學(xué)習(xí)。我只是簡(jiǎn)單介紹我正在做的事情。如果這對(duì)你能有所幫助,或者你也覺(jué)得很有趣,就已經(jīng)很好了。如果你發(fā)現(xiàn)了錯(cuò)誤或有什么改進(jìn)建議也請(qǐng)告訴我,你的回復(fù)對(duì)我也很重要。”

閱讀本文前你并不需要具備機(jī)器學(xué)習(xí)的相關(guān)經(jīng)驗(yàn)。示例代碼是使用Python寫(xiě)的,如果你有Python的基礎(chǔ)知識(shí)是最好的。但如果你只是掌握其他的編程語(yǔ)言,那也已經(jīng)足夠了。由于篇幅限制,本系列將分四篇文章發(fā)布。

為什么讓機(jī)器學(xué)會(huì)圖像識(shí)別?

圖像識(shí)別是開(kāi)發(fā)和測(cè)試機(jī)器學(xué)習(xí)的一項(xiàng)重要任務(wù),因?yàn)橐曈X(jué)可能是最重要的一項(xiàng)感知能力。雖然對(duì)于人類來(lái)說(shuō),它是與生俱來(lái)的。但它是怎么實(shí)現(xiàn)的?大腦是怎樣將視網(wǎng)膜上的圖像轉(zhuǎn)化成我們對(duì)周圍環(huán)境的心智模式的?我想沒(méi)人能對(duì)此一清二楚。

關(guān)鍵是,對(duì)我們來(lái)說(shuō)這看起來(lái)如此簡(jiǎn)單——我們不需要有意識(shí)地去做這件事,而對(duì)于計(jì)算機(jī)來(lái)說(shuō)卻困難重重(事實(shí)上,對(duì)我們來(lái)說(shuō)也并不是看上去那么簡(jiǎn)單。只是我們并沒(méi)有意識(shí)到進(jìn)行了多少工作。有超過(guò)一半的大腦區(qū)域直接或間接參與了視覺(jué)活動(dòng))。

在我們甚至都不知道自己怎么看到東西的情況下,怎么讓計(jì)算機(jī)去做到這樣的事情呢?這就是機(jī)器學(xué)習(xí)要研究的事情。我們采取的方法是讓計(jì)算機(jī)自己去完成這樣的過(guò)程,而不是手把手地一步步教會(huì)計(jì)算機(jī)如何解釋圖像并翻譯成計(jì)算機(jī)程序。我們給計(jì)算機(jī)提供總體結(jié)構(gòu),讓計(jì)算機(jī)從經(jīng)驗(yàn)中學(xué)習(xí),就像我們?nèi)祟愖龅哪菢印?/p>

但是,在我們開(kāi)始構(gòu)想計(jì)算機(jī)視覺(jué)的整體方案之前,讓我們把這個(gè)任務(wù)簡(jiǎn)化為一個(gè)容易掌握的小目標(biāo)。

圖像分類和CIFAR-10數(shù)據(jù)集

我們嘗試解決一個(gè)盡可能小而簡(jiǎn)單的問(wèn)題,另外也不要期望它能瞬間讓我們成為機(jī)器學(xué)習(xí)大師。我們希望計(jì)算機(jī)能做的包括以下方面:當(dāng)我們向計(jì)算機(jī)展示一幅圖片(特定尺寸)時(shí),它能夠?qū)D片進(jìn)行分析并打上標(biāo)簽。他可以從固定數(shù)量的標(biāo)簽中進(jìn)行選擇,每一類的標(biāo)簽描述了一種圖像的內(nèi)容。我們的目標(biāo)就是這個(gè)模型能夠盡可能地挑選出正確的標(biāo)簽。這個(gè)任務(wù)被稱作圖像分類。

我們將使用標(biāo)準(zhǔn)的CIFAR-10數(shù)據(jù)集。CIFAR-10包含了60000幅圖片。它有10個(gè)不同的分類,每類包含6000幅圖片。每幅圖片的規(guī)格是32×32像素。這么小尺寸的圖片對(duì)我們?nèi)祟悂?lái)說(shuō)有時(shí)很難進(jìn)行正確的分類,但它卻簡(jiǎn)化了計(jì)算機(jī)模型的任務(wù),并降低了分析圖片的計(jì)算負(fù)載。

 


CIFAR-10數(shù)據(jù)集中10個(gè)分類中的隨機(jī)圖片。由于分辨率低,人類很難進(jìn)行正確的標(biāo)簽。

我們將圖片轉(zhuǎn)化為一連串的數(shù)字輸送給計(jì)算模型。每個(gè)像素由代表紅色,綠色和藍(lán)色的三個(gè)浮點(diǎn)數(shù)來(lái)表示。其結(jié)果就是32x32x3=3072個(gè)值。

除了CIFAR-10,還有很多其他的圖像數(shù)據(jù)集可以用于計(jì)算機(jī)視覺(jué)的研究。之所以使用標(biāo)準(zhǔn)數(shù)據(jù)集,有兩個(gè)目的:

第一,要收集這么多的圖片是一項(xiàng)巨大的工作。你需要有大量的圖片資源,并根據(jù)需要對(duì)他們進(jìn)行分別標(biāo)簽。

第二,使用相同的數(shù)據(jù)集,可以讓我們有目的地比較不同方法的優(yōu)劣。

另外,使用標(biāo)準(zhǔn)數(shù)據(jù)集,可以相互比較,在競(jìng)賽中排出名次。最有名的比賽是Image-Net圖像識(shí)別大賽,它需要對(duì)1000個(gè)不同的種類進(jìn)行識(shí)別。2012年的勝者是來(lái)自多倫多大學(xué)(University of Toronto)的亞力克斯•克利則夫斯基(Alex Krizhevsky),伊利亞·蘇特斯科娃(Ilya Sutskever)和杰夫·辛頓(Geoffrey Hinton)設(shè)計(jì)的算法(雷鋒網(wǎng)注:可點(diǎn)擊論文鏈接查看)。這個(gè)系統(tǒng)領(lǐng)跑整個(gè)比賽并且以巨大的優(yōu)勢(shì)獲勝。

這次比賽對(duì)整個(gè)研究領(lǐng)域產(chǎn)生了巨大的沖擊,因?yàn)檫@是第一次使用卷積神經(jīng)網(wǎng)絡(luò)的方法獲得勝利。卷積神經(jīng)網(wǎng)絡(luò)是一種人工神經(jīng)網(wǎng)絡(luò),它大致模擬了動(dòng)物視覺(jué)的皮質(zhì)行為。這一技術(shù)的應(yīng)用已經(jīng)有一段時(shí)間,但它的潛力還沒(méi)被多數(shù)人認(rèn)識(shí)到。2012 Image-Net競(jìng)賽后,這種情況出現(xiàn)了改變。

人們突然對(duì)神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)(深度學(xué)習(xí)是使用多層神經(jīng)網(wǎng)絡(luò)的方法解決機(jī)器學(xué)習(xí)的問(wèn)題)產(chǎn)生了巨大興趣,而這次賽事也極大地推動(dòng)了以后幾年深度學(xué)習(xí)的快速發(fā)展。

監(jiān)督學(xué)習(xí)

我們?cè)趺词褂脠D像數(shù)據(jù)集讓計(jì)算機(jī)自己學(xué)習(xí)呢?即使計(jì)算機(jī)自己能夠?qū)W習(xí),我們也需要告訴它學(xué)習(xí)什么和怎樣學(xué)習(xí)。所以,我們需要通過(guò)制定一個(gè)大致的流程讓計(jì)算機(jī)能夠?qū)D像進(jìn)行評(píng)估。

我們定義一個(gè)通用的數(shù)學(xué)模型,將輸入圖像轉(zhuǎn)換為輸出標(biāo)簽。這個(gè)模型的實(shí)際輸出不僅僅依賴于圖像本身,還依賴模型內(nèi)建的參數(shù)。這些參數(shù)并不是由我們提供,而是由計(jì)算機(jī)通過(guò)學(xué)習(xí)獲得。

這樣一來(lái),這個(gè)過(guò)程可以被理解為一個(gè)優(yōu)化問(wèn)題。我們初始定義一個(gè)模型并提供初始的參數(shù)值。然后再向模型輸入圖像數(shù)據(jù)集和已知的正確標(biāo)簽。這就是訓(xùn)練的過(guò)程。在這個(gè)階段模型重復(fù)校驗(yàn),訓(xùn)練數(shù)據(jù),持續(xù)調(diào)整參數(shù)值。目標(biāo)是找到合適的參數(shù)使模型輸出盡可能多的正確結(jié)果。這種同時(shí)使用輸入數(shù)據(jù)和正確結(jié)果的訓(xùn)練方法叫做監(jiān)督學(xué)習(xí)。還有一種叫做非監(jiān)督學(xué)習(xí),這種學(xué)習(xí)中只使用了輸入數(shù)據(jù)而沒(méi)有標(biāo)簽,但在這篇文章中我們不做討論。

當(dāng)訓(xùn)練完成,模型參數(shù)被固定下來(lái),并可以被用于圖像集以外的圖像分類。

在訓(xùn)練期間,模型的預(yù)測(cè)結(jié)果與真實(shí)值進(jìn)行比較。這些信息被用于更新參數(shù)值。在測(cè)試過(guò)程中就不再有反饋,模型只是產(chǎn)生標(biāo)簽。

TensorFlow

TensorFlow是機(jī)器學(xué)習(xí)的開(kāi)源軟件庫(kù),它由Google在2015年發(fā)布并很快成為全世界的研究者和學(xué)習(xí)者中最流行的機(jī)器學(xué)習(xí)庫(kù)之一。它在圖像分類模型中承擔(dān)重要作用。

接下來(lái),我們就要開(kāi)始學(xué)習(xí)如何用TensorFlow搭建一個(gè)合適的模型。

建立模型,一個(gè)Softmax分類器

  1. Github支持這個(gè)模型的完整代碼。在使用之前,你需要安裝以下軟件:
  2. Python(代碼經(jīng)過(guò)了Python2.7測(cè)試,Python3.3+也應(yīng)該可以工作,安裝鏈接)
  3. TensorFlow(安裝指導(dǎo)鏈接)

CIFAR-10數(shù)據(jù)集:下載Python版本的數(shù)據(jù)集

從https://www.cs.toronto.edu/~kriz/cifar.html下載或者使用鏈接中的壓縮文檔。請(qǐng)把 cifar-10-batches-py解壓到python源代碼的目錄下,這樣圖像的路徑應(yīng)該為/Path-to-your-python-source-code-files/cifar-10-batches-py/。

好了,現(xiàn)在我們可以開(kāi)始了。讓我們先來(lái)看看試驗(yàn)的主文件softmax.py,一行一行地來(lái)分析:

根據(jù)TensorFlow代碼規(guī)范,在所有TensorFlow Python文件中為了Python2和3的兼容性,都應(yīng)該添加future語(yǔ)句。然后導(dǎo)入TensorFlow,numpy用于數(shù)值計(jì)算和時(shí)間模塊。data_helper.py包括加載和準(zhǔn)備數(shù)據(jù)集的函數(shù)。

我們啟動(dòng)一個(gè)計(jì)時(shí)器測(cè)量運(yùn)行時(shí)間和定義一些參數(shù)。稍后在實(shí)際使用它們時(shí)再進(jìn)行討論。然后加載CIFAR-10數(shù)據(jù)集。因?yàn)樽x取數(shù)據(jù)并不是我們要做的核心,我把這部分的函數(shù)單獨(dú)放在data_helper.py文件中。它只是負(fù)責(zé)讀取包含數(shù)據(jù)集的文件,并把數(shù)據(jù)放入一個(gè)方便我們操作的數(shù)據(jù)結(jié)構(gòu)中。

需要提到的重要的一點(diǎn)是,load_data()是將60000幅圖像分為兩部分。大的一部分包含50000幅圖像。這些數(shù)據(jù)集用于訓(xùn)練我們的模型。另外的10000幅圖像被稱作測(cè)試集。在訓(xùn)練結(jié)束之前,我們的模型將不會(huì)看到這些圖像。直到模型中的參數(shù)不再變換,我們使用測(cè)試集作為模型輸入來(lái)檢驗(yàn)?zāi)P偷男阅堋?/p>

將數(shù)據(jù)分為訓(xùn)練集和測(cè)試集非常重要。我們并不知道我們的模型在遇到訓(xùn)練數(shù)據(jù)集或測(cè)試數(shù)據(jù)集的時(shí)候是否有相同的表現(xiàn)。最糟的情況在于,模型記錄下了它看過(guò)的所有圖像。如果我們使用相同的訓(xùn)練集進(jìn)行測(cè)試,模型通過(guò)查找存儲(chǔ)下來(lái)的正確答案,可能表現(xiàn)得非常完美。但是如果使用它從未見(jiàn)過(guò)的圖像則原形畢露。這在模型學(xué)習(xí)中有個(gè)專門(mén)的概念叫做過(guò)度擬合,就是說(shuō)特定的訓(xùn)練數(shù)據(jù)可能掩蓋一些更為通常的特征。在機(jī)器學(xué)習(xí)中避免過(guò)度擬合是一項(xiàng)重大的課題。關(guān)于過(guò)度擬合和為什么建議將數(shù)據(jù)分成2個(gè)或者3個(gè)數(shù)據(jù)集,可以參考Coursera上吳恩達(dá)(Andrew Ng)機(jī)器學(xué)習(xí)課程的節(jié)選視頻。

回到我們的代碼,load_data()返回一個(gè)dictionary類型數(shù)據(jù):

images_train:訓(xùn)練集轉(zhuǎn)換為50000×3072(32像素x32像素x3個(gè)顏色通道)的數(shù)組

labels_train:訓(xùn)練集的50000個(gè)標(biāo)簽(每個(gè)數(shù)字從0到9代表圖像訓(xùn)練集的10個(gè)分類)

images_test:測(cè)試集(10000×3072)

labels_test:測(cè)試集的10000個(gè)標(biāo)簽

classes:10個(gè)文本標(biāo)簽,將數(shù)字轉(zhuǎn)換成文字(0代表“飛機(jī)”,1代表“車”,等等)

做好了這些工作后,我們?cè)谙缕獙Т蠹议_(kāi)始建立這個(gè)模型。

責(zé)任編輯:武曉燕 來(lái)源: 36大數(shù)據(jù)
相關(guān)推薦

2017-01-18 09:20:23

TensorFlow圖像識(shí)別

2017-10-18 09:48:13

深度學(xué)習(xí)TensorFlow入門(mén)篇

2017-10-27 10:29:35

人臉識(shí)別UbuntuPython

2021-08-09 13:31:25

PythonExcel代碼

2017-10-29 21:43:25

人臉識(shí)別

2022-10-19 14:30:59

2018-03-05 11:10:12

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數(shù)據(jù)pandas數(shù)據(jù)分析

2022-08-04 10:39:23

Jenkins集成CD

2021-06-23 07:16:06

buildroot Linux內(nèi)核根文件系統(tǒng)

2020-10-23 17:23:50

機(jī)器學(xué)習(xí)技術(shù)模型

2020-10-23 06:42:16

機(jī)器學(xué)習(xí)開(kāi)發(fā)人工智能

2009-04-22 09:17:19

LINQSQL基礎(chǔ)

2021-05-10 06:48:11

Python騰訊招聘

2021-01-21 09:10:29

ECharts柱狀圖大數(shù)據(jù)

2021-01-08 10:32:24

Charts折線圖數(shù)據(jù)可視化

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2020-03-08 22:06:16

Python數(shù)據(jù)IP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)