丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號(hào)安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時(shí)鏈接,僅用于文章預(yù)覽,將在時(shí)失效
人工智能開發(fā)者 正文
發(fā)私信給恒亮
發(fā)送

0

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

本文作者: 恒亮 2017-03-22 12:17
導(dǎo)語:大牛通過代碼實(shí)操為你詳細(xì)講解究竟怎樣用 Tensorflow 搭建一套自己的圖像識(shí)別模塊。

自 2015 年 11 月首次發(fā)布以來,TensorFlow 憑借谷歌的強(qiáng)力支持,快速的更新和迭代,齊全的文檔和教程,以及上手快且簡單易用等諸多的優(yōu)點(diǎn),已經(jīng)在圖像識(shí)別、語音識(shí)別、自然語言處理、數(shù)據(jù)挖掘和預(yù)測等 AI 場景中得到了十分廣泛的應(yīng)用。

在所有這些 AI 應(yīng)用場景中,或許是源于視覺對(duì)人類的直觀性和重要性,圖像識(shí)別成為其中發(fā)展速度最快的一個(gè)。目前,該技術(shù)已經(jīng)逐漸趨于成熟,并在人臉和情緒識(shí)別、安防、醫(yī)療篩查和汽車壁障等諸多領(lǐng)域都取得了重大成功。

在這種情況下,對(duì)于絕大多數(shù)的 AI 開發(fā)者而言,利用 TensorFlow 自己親手搭建一個(gè)圖像識(shí)別模塊,就成了一項(xiàng)最順理成章的挑戰(zhàn)。

為了幫助有志于此的開發(fā)者實(shí)現(xiàn)目標(biāo),也為了向那些親手搭建過圖像識(shí)別模塊的技術(shù)達(dá)人提供一個(gè)與行業(yè)大牛交流、學(xué)習(xí)的機(jī)會(huì),本次公開課雷鋒網(wǎng) AI 研習(xí)社有幸邀請(qǐng)到才云科技(Caicloud.io)聯(lián)合創(chuàng)始人、首席大數(shù)據(jù)科學(xué)家鄭澤宇,他將深入到代碼層為我們詳細(xì)講解究竟怎么用 Tensorflow 自己親手搭建一套圖像識(shí)別模塊。

  嘉賓介紹

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

鄭澤宇,暢銷書《TensorFlow:實(shí)戰(zhàn) Google 深度學(xué)習(xí)框架》作者,才云科技(Caicloud.io)聯(lián)合創(chuàng)始人、首席大數(shù)據(jù)科學(xué)家。才云科技(Caicloud.io)是一家云計(jì)算、人工智能創(chuàng)業(yè)公司。最近推出全球首個(gè)商用 TensorFlow as a Service (TaaS) 深度學(xué)習(xí)平臺(tái)和行業(yè)大數(shù)據(jù)解決方案,用數(shù)據(jù)助力企業(yè)成長。

鄭澤宇曾在 Google 擔(dān)任高級(jí)工程師,作為主要技術(shù)人員參與并領(lǐng)導(dǎo)了多個(gè)大數(shù)據(jù)項(xiàng)目。提出并主導(dǎo)的產(chǎn)品聚類項(xiàng)目用于銜接谷歌購物和谷歌知識(shí)圖譜(Knowledge Graph)數(shù)據(jù),使得知識(shí)卡片形式的廣告逐步取代傳統(tǒng)的產(chǎn)品列表廣告,開啟了谷歌購物廣告在搜索頁面投遞的新紀(jì)元。

鄭澤宇擁有 CMU 計(jì)算機(jī)碩士學(xué)位,在機(jī)器學(xué)習(xí)、人工智能領(lǐng)域有多年研究經(jīng)驗(yàn), 并在 SIGIR、SIGKDD、ACL、ICDM、ICWSM 等頂級(jí)國際會(huì)議上發(fā)表多篇學(xué)術(shù)論文。

  公開課內(nèi)容

本次公開課的主要內(nèi)容包括:

1. 深度學(xué)習(xí)簡介

2. 神經(jīng)網(wǎng)絡(luò)工作原理

3. 用 TensorFlow 實(shí)現(xiàn)圖像識(shí)別

4. 疑難問題解答及討論

以下為公開課完整視頻:共 55 分鐘。

 

以下為公開課內(nèi)容的文字及 PPT 整理。

大家好,今天我想跟大家分享一些深度學(xué)習(xí)算法在圖像識(shí)別上的應(yīng)用。

主要內(nèi)容大概可以分為如下三個(gè)部分:

● 深度學(xué)習(xí)介紹;

● 神經(jīng)網(wǎng)絡(luò)工作原理;

● 用 TensorFlow 實(shí)現(xiàn)圖像識(shí)別。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

深度學(xué)習(xí)介紹

我們知道深度學(xué)習(xí)現(xiàn)在是已經(jīng)是一個(gè)非常熱門的技術(shù),那大家第一次聽到這個(gè)深度學(xué)習(xí)的時(shí)候呢?很有可能就是因?yàn)槿ツ赀@個(gè)時(shí)候 AlphaGo 戰(zhàn)勝李世石的這個(gè)事情。當(dāng)時(shí)這個(gè)事情獲得了全社會(huì)的廣泛關(guān)注和熱烈討論。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

但其實(shí) AlphaGo 并不是第一個(gè)戰(zhàn)勝人類的智能機(jī)器人,早在 20 年前就有過 IBM 深藍(lán)機(jī)器人戰(zhàn)勝人類國際象棋冠軍的記錄。那為什么 AlphaGo 可以引發(fā)這么大的關(guān)注呢?

我認(rèn)為原因有兩個(gè)方面:一是圍棋的復(fù)雜度遠(yuǎn)超國際象棋;二是因?yàn)樯疃葘W(xué)習(xí)技術(shù)的發(fā)展,它推動(dòng)了不僅是一個(gè) AlphaGo 這樣的應(yīng)用程序,它其實(shí)也推動(dòng)了各個(gè)方面的人工智能的應(yīng)用。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

例如谷歌的無人車項(xiàng)目,就是一個(gè)距離我們更近的例子。大家都知道,現(xiàn)在無論在國內(nèi)還是國外,堵車和停車的問題其實(shí)都是很嚴(yán)重的。但是如果有了無人車這樣一個(gè)工具,就能大大提升車主的用戶體驗(yàn)。

正是因?yàn)樯疃葘W(xué)習(xí)技術(shù)在 AlphaGo 和無人車等項(xiàng)目背后的巨大推動(dòng)力,才使得這些項(xiàng)目能夠發(fā)展到目前這樣一個(gè)比較高的水平。

但其實(shí),深度學(xué)習(xí)技術(shù)并不是一個(gè)新技術(shù),它的起源可以追溯到幾十年前,只是這兩年才得到了一個(gè)比較快速的發(fā)展。如圖中所示的搜索熱度變化圖也能看出,從 2012 年到 2016 年,深度學(xué)習(xí)這個(gè)詞的受關(guān)注程度是處于一個(gè)指數(shù)級(jí)增長的狀態(tài)。那為什么會(huì)在 2012 年這個(gè)時(shí)間點(diǎn)出現(xiàn)這樣的一個(gè)增長呢?其實(shí)是因?yàn)?ImageNet 這樣一個(gè)圖像識(shí)別的比賽。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

ImageNet 是由李飛飛教授發(fā)起的一個(gè)著名的圖像識(shí)別數(shù)據(jù)集,里面包括了各種各樣的圖片,然后參賽者需要將物體從圖片中標(biāo)記出來,做一個(gè)分類。這個(gè)比賽每年都會(huì)舉辦,而且每次的比賽細(xì)節(jié)都會(huì)有所不同。然后在 2012 年的時(shí)候,由于深度學(xué)習(xí)的作用,比賽結(jié)果產(chǎn)生了一個(gè)巨大突破。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

從下圖可以看出,在 2012 年之前,采用了傳統(tǒng)分類算法的時(shí)候,錯(cuò)誤率大概是 26% 左右。而且我們可以看到這個(gè)錯(cuò)誤率的變化趨勢非常緩慢,也就是說要減低一點(diǎn)錯(cuò)誤率,就必須付出巨大的努力。但是在引入深度學(xué)習(xí)算法之后,從 2011 到 2012 年,使得錯(cuò)誤率從 26% 一下子降低到了 16%,并且從 2012 年開始的這三四年中,錯(cuò)誤率還在以每年 4% 左右的一個(gè)速度在降低。到 2015 年,機(jī)器的識(shí)別率已經(jīng)接近了人類的水平,即 5.1% 的錯(cuò)誤率。2016 年,機(jī)器最新的識(shí)別正確率已經(jīng)達(dá)到了 97% ,錯(cuò)誤率達(dá)到了 3% 左右,已經(jīng)比人類好得多。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

如下圖是才云科技集成 Google 訓(xùn)練好的一個(gè)模型,它可以通過分析用戶上傳的圖片,例如一頭牛,然后分析出這頭牛是某個(gè)品種的概率是多少。還有現(xiàn)在大家在 Google 或者百度上傳一張圖片,然后搜索引擎就能比較精確地告訴你這個(gè)圖片里的主體是什么動(dòng)物,或者什么植物,甚至還能提供一段簡單的文字描述等等。其實(shí)這些都是基于深度學(xué)習(xí)的算法來實(shí)現(xiàn)的。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

除了圖像識(shí)別之外,其實(shí)深度學(xué)習(xí)的早期應(yīng)用是數(shù)字識(shí)別。例如圖中所示的這個(gè)就是 1998 年的時(shí)候 Yann LeCun 教授做的一個(gè)手寫體數(shù)字識(shí)別的項(xiàng)目(如下圖所示),用的就是深度學(xué)習(xí)技術(shù)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

此外還有 Google 在地圖上的應(yīng)用,能夠通過圖像識(shí)別自動(dòng)定位門牌號(hào)和地理位置等信息。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

其實(shí)神經(jīng)網(wǎng)絡(luò),也就是深度學(xué)習(xí)技術(shù)用在圖像識(shí)別的應(yīng)用還有很多,包括人臉識(shí)別、安防領(lǐng)域、火警、群眾事件,還有現(xiàn)在的美顏等等。并且,受到神經(jīng)網(wǎng)絡(luò)思想的啟發(fā),目前包括語音識(shí)別、機(jī)器翻譯、自然語言處理和大數(shù)據(jù)分析、預(yù)測等行業(yè)都得到一個(gè)比較大的發(fā)展。

神經(jīng)網(wǎng)絡(luò)原理

下面簡單介紹一下神經(jīng)網(wǎng)絡(luò)的情況。

這里我不會(huì)去推導(dǎo)前向傳播或者反向傳播的具體過程。前向傳播的過程比較簡單,這里會(huì)做一個(gè)大致的介紹。而反向傳播對(duì)數(shù)學(xué)的要求比較高,并且通過 TensorFlow 可以非常容易地去實(shí)現(xiàn),因此我只會(huì)簡單介紹一下基本原理,大家自己有興趣的話可以自己去深挖。這個(gè)部分我主要還是做一些流程上的介紹,讓大家知道一個(gè)完整的機(jī)器學(xué)習(xí)或者說圖像識(shí)別問題,我該怎樣一步一步地去解決它,包括我需要做哪些事,什么事情可以通過什么工具來幫助我實(shí)現(xiàn)。

首先我們來介紹一下什么是深度學(xué)習(xí)。大家可能經(jīng)常會(huì)聽到深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)這些詞,但它們之間究竟是一個(gè)什么關(guān)系呢?其實(shí),深度學(xué)習(xí)在維基百科上的定義是:多層的非線性變換的一個(gè)算法合集。那怎樣實(shí)現(xiàn)這個(gè)多層非線性變換呢?最好最方便的一種方法就是神經(jīng)網(wǎng)絡(luò)。所以說基本上當(dāng)前來講的深度學(xué)習(xí),就等于是深層神經(jīng)網(wǎng)絡(luò)的一個(gè)代名詞。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

神經(jīng)網(wǎng)絡(luò),大家從這個(gè)詞就能看出它多多少少跟人腦的神經(jīng)網(wǎng)絡(luò)有些關(guān)聯(lián)。如圖所示,左上角就是一個(gè)神經(jīng)元的模型,他包括很多不同的輸入,以及一個(gè)軸殼來處理這些輸入,最終得到一個(gè)輸出。這個(gè)對(duì)應(yīng)到人工神經(jīng)網(wǎng)絡(luò)也是一樣的,它會(huì)有多個(gè)輸入,然后經(jīng)過一些變換得到輸出。但人腦的變換函數(shù)具體是怎樣的,現(xiàn)在還弄不清楚,我們只能通過這樣一組加權(quán)和,加上一個(gè)激活函數(shù)來模擬人腦。

大家都知道,人腦是通過這種神經(jīng)網(wǎng)絡(luò)的網(wǎng)絡(luò)狀結(jié)構(gòu)處理信息的,因此在人工神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)中也是通過這樣的一種多層結(jié)構(gòu)來實(shí)現(xiàn)神經(jīng)元的連接。如上圖的右下角所示,每一個(gè)圓圈都代表一個(gè)神經(jīng)元,多個(gè)輸入,一個(gè)輸出,上一層的輸出作為下一層的輸入。

下面我簡單介紹一下怎么用這個(gè)網(wǎng)絡(luò)結(jié)構(gòu)來處理問題。比如數(shù)字識(shí)別問題,如圖所示的數(shù)字圖像在計(jì)算機(jī)里就是一個(gè)像素矩陣,然后每個(gè)矩陣元素里面都是各種各樣的一個(gè)數(shù)字,我們把這些數(shù)字作為這個(gè)神經(jīng)網(wǎng)絡(luò)的輸入層提供進(jìn)來,然后通過不同結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò)處理,從輸入層到隱藏層再到輸出層,就可以得到處理結(jié)果。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

比如圖中的這個(gè)手寫數(shù)字問題,其實(shí)就是要識(shí)別這個(gè)數(shù)字到底和 0 到 9 中的哪個(gè)數(shù)字更像一點(diǎn)。我們可以安排輸出層有 10 個(gè)結(jié)點(diǎn),分別代表 0 到 9 的 10 個(gè)數(shù)字。那么如果這個(gè)圖像是 1 的話,我們就希望代表 1 的這個(gè)結(jié)點(diǎn)輸出的結(jié)果是 1 ,其他的結(jié)點(diǎn)是 0 。這樣的話假設(shè)我們輸入一張圖像,然后發(fā)現(xiàn)代表數(shù)字 7 的結(jié)點(diǎn)輸出為 1,其他結(jié)點(diǎn)為 0 ,那么我們就等于識(shí)別出了這個(gè)圖像的內(nèi)容是 7,也就完成了一個(gè)數(shù)字識(shí)別的任務(wù)。

這只是一個(gè)最簡單的例子,還有更多更復(fù)雜的神經(jīng)網(wǎng)絡(luò)這里我們就不做具體介紹了,感興趣的朋友可以關(guān)注才云科技開源的一個(gè)代碼庫,里面有各種豐富的樣例代碼。(雷鋒網(wǎng)注:開源地址見下文鏈接)

下面簡單介紹一下深度學(xué)習(xí)的兩個(gè)大的分類:監(jiān)督學(xué)習(xí)和非監(jiān)督學(xué)習(xí)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

我通常會(huì)把機(jī)器學(xué)習(xí)和人類學(xué)習(xí)來做一個(gè)對(duì)比,其實(shí)有很多地方都是比較類似的。例如我們小時(shí)候去上課,然后考試。其實(shí)機(jī)器學(xué)習(xí)也是一個(gè)類似的過程,它通過海量的數(shù)據(jù),然后學(xué)習(xí)(總結(jié))出一些對(duì)應(yīng)的規(guī)律,并將規(guī)律應(yīng)用在一個(gè)測試環(huán)境上,就能得到一個(gè)諸如正確率這樣的評(píng)測指標(biāo),最終通過評(píng)測指標(biāo)來評(píng)測一個(gè)機(jī)器學(xué)習(xí)算法的好壞。

那么在監(jiān)督學(xué)習(xí)的場景中,通過海量的標(biāo)記過的數(shù)據(jù),就相當(dāng)于人類在學(xué)習(xí)中通過大量的做題,然后每做一個(gè)題都知道對(duì)錯(cuò),沒有錯(cuò)的話就加強(qiáng)這個(gè)過程,有錯(cuò)的話就反向改進(jìn),這就是監(jiān)督學(xué)習(xí)。

而非監(jiān)督式就不需要人為的標(biāo)簽數(shù)據(jù),它是監(jiān)督式和強(qiáng)化學(xué)習(xí)等策略之外的一個(gè)選擇。典型的非監(jiān)督學(xué)習(xí)有聚類等,它是直接從數(shù)據(jù)中尋找相似性,即規(guī)律。

現(xiàn)在其實(shí)機(jī)器學(xué)習(xí)除了監(jiān)督式和非監(jiān)督式之外,還有增強(qiáng)學(xué)習(xí)。它是和監(jiān)督式及非監(jiān)督式都有些不同的一種方式。然后,但其實(shí)在工業(yè)界用得最多的,其實(shí)還是監(jiān)督式學(xué)習(xí)的方式,非監(jiān)督式和增強(qiáng)學(xué)習(xí)現(xiàn)在在工業(yè)界的使用還是相對(duì)比較少。那其實(shí)我們今天也會(huì)主要以監(jiān)督式的這種學(xué)習(xí)方式作為一個(gè)樣例,來告訴大家怎樣去完成一個(gè)監(jiān)督式的學(xué)習(xí)方法來完成圖像識(shí)別工作。

在具體介紹整個(gè)模型之前,這里我先跟大家詳細(xì)介紹一下神經(jīng)網(wǎng)絡(luò)的工作原理。

剛剛講到,我們要去做一個(gè)圖像分類模塊,就相當(dāng)于是把這個(gè)圖像的原始的像素矩陣傳入輸入層,然后經(jīng)過一層一層的推導(dǎo),得到輸出層。那其實(shí)神經(jīng)網(wǎng)絡(luò)里面一個(gè)最關(guān)鍵的部分,就是說我怎樣通過一層一層的網(wǎng)絡(luò)結(jié)構(gòu)來得到從輸入層到輸出層的結(jié)果。最簡單的來講,我們先要知道一個(gè)單一的神經(jīng)元的工作方式。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

如圖所示,我們其實(shí)可以將每個(gè)神經(jīng)元視為這樣的一個(gè)多項(xiàng)式組合,w表示權(quán)重,b表示偏移量。那么訓(xùn)練時(shí)一個(gè)最重要的工作就是找到最合適的權(quán)重,使得我們的實(shí)際輸出與預(yù)想輸出一致。那么輸入的一個(gè)加權(quán)平均,加一個(gè)偏移,最后再通過一個(gè)激活函數(shù),最后就能得到輸出。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里我們以一個(gè)判斷零件是否合格的例子來講解,注意這里省略了偏移量和激活函數(shù)。比如說我這里的每一個(gè)零件它都會(huì)有長度、質(zhì)量等參數(shù),就相當(dāng)于收集了很多關(guān)于這個(gè)零件的數(shù)據(jù),其中有一些我們知道是已經(jīng)合格了的,也就相當(dāng)于有了一個(gè)訓(xùn)練數(shù)據(jù)。將這些訓(xùn)練數(shù)據(jù)輸入模型,通過結(jié)果對(duì)比不斷調(diào)節(jié)隱藏層的權(quán)重參數(shù),最終達(dá)到一定的正確率之后,也就是完成了模型訓(xùn)練。接著我們可以測量任意一個(gè)零件的參數(shù),把測量數(shù)據(jù)輸入神經(jīng)網(wǎng)絡(luò),就能判斷這個(gè)零件是否合格。

這樣的一個(gè)過程其實(shí)就是正向傳播的一個(gè)過程。反向傳播相當(dāng)于是我知道一個(gè)零件的長度和質(zhì)量,也知道它是否合格的時(shí)候,再去根據(jù)這個(gè)目標(biāo)做一個(gè)反向的回饋。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里我列出了一些簡單的激活函數(shù),注意這里所有的激活函數(shù)都是非線性的函數(shù)。如果一個(gè)模型沒有激活函數(shù)的話,就相當(dāng)于是所有線性過程的疊加,不論模型有多少層,疊加出來還是一個(gè)線性過程,也就是模型沒有涉及非線性的因素,也就不會(huì)有實(shí)際的應(yīng)用。而激活函數(shù)就是一個(gè)提供非線性過程的因子,有了激活函數(shù)我們才能完成一個(gè)非線性變化的過程。

更詳細(xì)的內(nèi)容大家可以參考《TensorFlow:實(shí)戰(zhàn)Google深度學(xué)習(xí)框架》這本書。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里我們介紹兩種常用的激活函數(shù):Softmax 和 Sigmoid。在多分類的問題中,經(jīng)過層層的推導(dǎo),其實(shí)每個(gè)節(jié)點(diǎn)的輸出都是不一定的。那么如果我們想得到一個(gè)概率分布,就需要用到 Softmax 這樣一個(gè)層。它相當(dāng)于對(duì)每個(gè)輸出節(jié)點(diǎn)的大小作為置信度做一個(gè)歸一化的操作,然后使得每一個(gè)最終輸出節(jié)點(diǎn)的值都在 0 到 1 之間,這樣就等于輸出了一個(gè)概率分布。我們可以大概理解為不同的輸出類別的一個(gè)概率分布。在多分類問題中,一般都會(huì)用 Softmax 作為最后的處理層,得到一個(gè)概率分布情況。類似的,在二分類中我們通常使用 Sigmoid 函數(shù)。

這樣,從輸入層到隱藏層到輸出層再到激活函數(shù),我們等于介紹了全連接神經(jīng)網(wǎng)絡(luò)的一個(gè)基本結(jié)構(gòu)。剛剛提到,監(jiān)督學(xué)習(xí)就是我們得到一個(gè)結(jié)果之后,能夠判斷它的好壞。那么怎么判斷和評(píng)測呢,就需要損失函數(shù)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

通過損失函數(shù),我們可以計(jì)算出實(shí)際輸出和真實(shí)標(biāo)簽的差別,然后進(jìn)行優(yōu)化,縮小這種差別。兩個(gè)經(jīng)典的損失函數(shù)一個(gè)是交叉熵,另一個(gè)是 MSE 最小平方差。他們詳細(xì)的用法,包括自定義函數(shù)怎么樣去定義等內(nèi)容,大家可以參考《TensorFlow:實(shí)戰(zhàn)Google深度學(xué)習(xí)框架》這本書。

定義完損失函數(shù),我們再來講講優(yōu)化。

首先,優(yōu)化的是什么?我們剛剛提到,神經(jīng)網(wǎng)絡(luò)里的每一個(gè)神經(jīng)元都有參數(shù),我們要優(yōu)化就是這些參數(shù)。那怎樣來優(yōu)化呢?就是通過我們定義的損失函數(shù),即推導(dǎo)得出的結(jié)果要跟真實(shí)結(jié)果越接近越好。這相當(dāng)于變成了一個(gè)最小化問題。最小化問題確實(shí)有比較成熟的數(shù)學(xué)解法。但對(duì)于神經(jīng)網(wǎng)絡(luò)這么復(fù)雜的一個(gè)結(jié)構(gòu),它其實(shí)并沒有特別好的數(shù)學(xué)公式能夠直接求解。

雖然說,優(yōu)化神經(jīng)網(wǎng)絡(luò)的算法有不少,但主體的思想其實(shí)都是基于梯度下降,或者隨機(jī)梯度下降。那么,梯度下降是什么?用簡單的話來講,它就相當(dāng)于是把不同參數(shù)的取值和損失函數(shù)的大小,看成空間中的一個(gè)曲面。最簡單的情況下,可看成二維空間上的一條曲線。任意一個(gè)參數(shù)的取值,就對(duì)應(yīng)了損失函數(shù)的取值。這樣子的話,我們就可以通過計(jì)算它的梯度來修改參數(shù),使得損失函數(shù)會(huì)往更小的這樣一個(gè)方向去發(fā)展。這就是優(yōu)化神經(jīng)網(wǎng)絡(luò)的最基本的思想。包括反向傳播算法,其實(shí)也就是怎么更快地去計(jì)算出每一個(gè)參數(shù)的梯度,使得計(jì)算的時(shí)間復(fù)雜度減少。優(yōu)化神經(jīng)網(wǎng)絡(luò)的核心思想其實(shí)還是梯度下降。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

梯度下降是在所有的數(shù)據(jù)集上去算它的梯度。但神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)量一般會(huì)比較大,一般很難把所有的數(shù)據(jù)全都用上。這樣的時(shí)候,我們一般會(huì)采用 minibatch。一次計(jì)算部分的梯度來減少計(jì)算量。本來我們就知道,梯度下降其實(shí)就已經(jīng)無法達(dá)到全局最優(yōu)值。那使用隨機(jī)梯度下降呢,其實(shí)就更加難以保證達(dá)到最小值,有全部訓(xùn)練數(shù)據(jù)集才能有最小值。但我們可以通過調(diào)整學(xué)習(xí)率,使它更加逼近極小值。

這些就是我想給大家講的,神經(jīng)網(wǎng)絡(luò)的大致工作原理。其實(shí)這個(gè)工作原理講得比較粗淺,也比較 high-level。但大部分人其實(shí)對(duì)主要的一些部分了解就 OK 了。

用 TensorFlow 實(shí)現(xiàn)圖像識(shí)別

接下來,我會(huì)把這些原理對(duì)應(yīng)到具體的代碼里面,然后讓大家知道怎么樣通過 TensorFlow 來實(shí)現(xiàn)圖像識(shí)別。同時(shí)講解怎么用 TensorFlow 來實(shí)現(xiàn)大致的機(jī)器學(xué)習(xí)分類算法。

雖然上面有很多的細(xì)節(jié)沒有覆蓋,但其實(shí) TensorFlow 也把這樣的一些細(xì)節(jié)給屏蔽掉了。我的意思是,其實(shí)大家只需要理解一些比較 high-level 的東西,就完全能夠通過 TensorFlow 來實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的訓(xùn)練。

我們先談什么是 TensorFlow,為什么要選擇 TensorFlow。

TensorFlow 是谷歌在 2015 年底開源的一個(gè)深度學(xué)習(xí)框架。雖然說是深度學(xué)習(xí),官方來講,其實(shí) Google 希望把它做成一個(gè)計(jì)算工具。但這個(gè)計(jì)算工具的主要任務(wù),就是用來實(shí)現(xiàn)深度學(xué)習(xí)算法。所以說,其他的功能我們暫時(shí)也就拋開不談。就深度學(xué)習(xí)的基本功能來講,TensorFlow 已經(jīng)得到廣泛的應(yīng)用。Google自不必提,現(xiàn)在所有 Google 內(nèi)部的深度學(xué)習(xí)系統(tǒng)全都是基于TensorFlow。DeepMind 賣了之后,推出的東西也都會(huì)基于TensorFlow。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

Google 之外,國內(nèi)包括華為、京東、小米,其實(shí)都在用 TensorFlow。國外像 Twitter、Uber、Snapchat 也在用。使用它的公司其實(shí)非常多?,F(xiàn)在學(xué)術(shù)界也好,工業(yè)界也好,都偏向使用它。為什么 TensorFlow 會(huì)這么受歡迎?除了有大公司的背書,社區(qū)的貢獻(xiàn)度也是非常重要的一個(gè)參考指標(biāo)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

在 GitHub,無論是從 star 的數(shù)量,fork 的數(shù)量,還是從 issues 和 pull request, TensorFlow 都遙遙領(lǐng)先于其他同類深度學(xué)習(xí)開源框架。對(duì)于深度學(xué)習(xí)來講,它還是一門正在發(fā)展中的技術(shù)。對(duì)于工具來講,我們認(rèn)為,它是否能夠跟上這門技術(shù)的發(fā)展,其實(shí)是非常重要的一個(gè)考核標(biāo)準(zhǔn)。就是說,因?yàn)榧夹g(shù)的發(fā)展是非??斓?,如果工具的發(fā)展落后于技術(shù)的發(fā)展,它就會(huì)有一個(gè)被淘汰的風(fēng)險(xiǎn)。所以說,當(dāng)它的社區(qū)活躍度非常高的時(shí)候,這個(gè)風(fēng)險(xiǎn)度就會(huì)相應(yīng)的降低。因此我們比較推薦使用 TensorFlow。對(duì)于新手來講,我們也比較推薦。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里給出了一個(gè)簡單的 TensorFlow 的 Hello World 的程序,實(shí)現(xiàn)了一個(gè)簡單的向量加法的操作。首先 import 了 TensorFlow ,然后定義了 a、b 兩個(gè)向量,包括 name 屬性,接著把它們加起來。這里 TensorFlow 采用了這樣的一個(gè)惰性計(jì)算模型,輸出的并不是加法的結(jié)果,而是結(jié)果的一個(gè)引用。另外,要運(yùn)行整個(gè) result 運(yùn)算,就必須定義一個(gè) session ,session 會(huì)掌握所有 TensorFlow 的運(yùn)算資源,然后通過 session 運(yùn)行相關(guān)操作。

這里只是簡單介紹了一個(gè) TensorFlow 的簡單用法,由于時(shí)間有限,也無法深入地去詳細(xì)介紹。我們關(guān)注的是如何用 TensorFlow 實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)的全連接,也就是加權(quán)和,加上激活函數(shù)的模型。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

加權(quán)和可以通過矩陣乘法的方式實(shí)現(xiàn)。如上圖代碼所示,這里通過 placeholder 的方法定義了一個(gè) input ,其中類型是必須的,其他的諸如 shape 等參數(shù)則可以等使用的時(shí)候再賦值。之后定義了權(quán)重 w 和偏移量 b,這里是通過 Variable 方法定義的,這樣等最后優(yōu)化的時(shí)候,TensorFlow 會(huì)針對(duì)這些 Variable 展開優(yōu)化。最后通過乘法和加法操作,也就是通過 output = tf.nn.relu(tf.matmul(x, w) + b) 這一行代碼就實(shí)現(xiàn)了神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)。

這里是通過基礎(chǔ)的 TensorFlow API 實(shí)現(xiàn)的,如果通過 Keras 等更高層的封裝來實(shí)現(xiàn)會(huì)更加簡單。這里我們是從基礎(chǔ)的 API 入手來進(jìn)行講解,如果大家對(duì)高層封裝感興趣,可以自己學(xué)習(xí)。需要指出的是,其實(shí)高層封裝和基礎(chǔ) API 的主要區(qū)別是實(shí)現(xiàn)上的區(qū)別,他們整體上的過程是基本一樣的。

下面我們來看一下如何用 TensorFlow 實(shí)現(xiàn)一個(gè)具體的圖像識(shí)別模塊,即從 MNIST 數(shù)據(jù)集中識(shí)別手寫數(shù)字。(完整代碼見下文鏈接)

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

可以看到,TensorFlow 通過 read_data_sets 方法對(duì)引用數(shù)據(jù)進(jìn)行了一個(gè)非常好的封裝,后續(xù)可以通過非常簡單的方式讀取這些劃分好的數(shù)據(jù)集,例如通過 train、validation、test 等關(guān)鍵詞就可以讀取訓(xùn)練和測試數(shù)據(jù)集等。

如下圖所示,然后是通過 next_batch 來獲取一小批的訓(xùn)練數(shù)據(jù)。我們剛剛提到,在利用梯度下降算法時(shí)需要在所有的訓(xùn)練數(shù)據(jù)上計(jì)算梯度,但是計(jì)算量太大了,因此這里通過 next_batch 方法,相當(dāng)于我們在所有的訓(xùn)練數(shù)據(jù)集中篩選一部分,隨機(jī)選取一部分訓(xùn)練數(shù)據(jù)集,提供到神經(jīng)網(wǎng)絡(luò)的輸入層,然后通過反向迭代方法去優(yōu)化這個(gè)神經(jīng)網(wǎng)絡(luò)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里 xx 設(shè)置等于 100,也就是我們得到了 xs 和 ys 兩個(gè)矩陣,xs 代表輸入數(shù)組,相當(dāng)于把一個(gè) 28×28 的手寫圖像展開成一個(gè)長度為 748 的一維數(shù)組。ys 相當(dāng)于我們的結(jié)果,也就是 0-9 這 10 種可能值。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

如上圖,完了之后是一個(gè)前向傳播的一個(gè)大致過程的程序截圖。這個(gè)過程就相當(dāng)于是定義一層一層的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),這里 inference 函數(shù)中的 input_tensor 相當(dāng)于輸入矩陣,后面的 reqularizer 就相當(dāng)于一個(gè)正則化的東西。我們可以看到,當(dāng)輸入來了之后,程序開始進(jìn)行一層一層的推導(dǎo),定義一層一層的權(quán)重和偏移量,算出每一層的結(jié)果,傳入下一層,進(jìn)入下一層的計(jì)算。

其實(shí)通過這個(gè)前項(xiàng)傳播的定義我們可以看到,無論是全連接層還是卷積神經(jīng)網(wǎng)絡(luò),甚至是循環(huán)神經(jīng)網(wǎng)絡(luò),它的大致流程都是一樣的,給定輸入,然后通過一層一層的傳遞就可以得到最后的輸出。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

如上圖,下面我們看一下主程序。其實(shí)主程序就是調(diào)用了 train 的過程,這個(gè) train 的過程其實(shí)也是比較簡單的。第一部分是定義輸入,也就是怎樣來提供這個(gè)訓(xùn)練數(shù)據(jù)的接口,也就是通過 placeholder 的方式導(dǎo)入,輸入這里是 x ,輸出是 y_ 。然后通過調(diào)用 inference 函數(shù)來進(jìn)行一個(gè)前向傳播的計(jì)算。然后定義了滑動(dòng)平均和損失函數(shù)。

這里的過程其實(shí)是就相當(dāng)于是:我通過輸入一個(gè)訓(xùn)練數(shù)據(jù)集,然后得到在當(dāng)前數(shù)據(jù)集下的推導(dǎo)結(jié)果,然后再通過這個(gè)推導(dǎo)結(jié)果和正確答案對(duì)比,就知道跟正確答案的差別在哪。下一步可以看到我們定義了 loss ,它相當(dāng)于評(píng)估當(dāng)前模型好壞的一個(gè)指標(biāo)。這里其實(shí)就相當(dāng)于是評(píng)價(jià) cross_entropy 加上正則化,這里正則化是為了避免過耦合的。

完了之后,下一行是通過 GradientDescentOptimizer 函數(shù)優(yōu)化。TensorFlow 提供了大概 5-7 中不同的優(yōu)化函數(shù)可供選擇,它們針對(duì)不同的應(yīng)用場景,各具特點(diǎn),大家可以靈活選擇。這里我認(rèn)為,對(duì)于那些不搞學(xué)術(shù)研究的同學(xué),其實(shí)沒有必要去從數(shù)學(xué)的角度推導(dǎo)每一個(gè)優(yōu)化函數(shù)具體是怎么優(yōu)化的,從應(yīng)用層的角度來看,大部分用戶只需要提供學(xué)習(xí)率和目標(biāo)函數(shù),并且了解這些優(yōu)化函數(shù)的優(yōu)劣就可以了,這個(gè)相對(duì)來說還是比較方便。

在把所有的這些計(jì)算方式都定義好了之后,下面就是生成 TensorFlow 的計(jì)算圖,以及生成 session。定義好 session 之后,下面訓(xùn)練的過程就比較簡單了,其實(shí)就是寫了一個(gè)循環(huán),每次選取一小部分訓(xùn)練數(shù)據(jù),然后去做訓(xùn)練,隔一段時(shí)間再打印一下訓(xùn)練結(jié)果,整個(gè)過程就完成了。

所以說整個(gè)用 Tensorflow 來實(shí)現(xiàn)一個(gè)神經(jīng)網(wǎng)絡(luò)的過程,相對(duì)還是比較簡單的。需要注意的是,這里我介紹的只是原生態(tài)的 TensorFlow,如果大家要去使用 TFLearn,或者 Keras 這些高級(jí)封裝去實(shí)現(xiàn) MNIST 問題的話,可能會(huì)更加簡單,大概只需要 2-3 行代碼就可以解決了。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

這里我們基本上把通過原生態(tài)的 Tensorflow 生成神經(jīng)網(wǎng)絡(luò)的過程為大家介紹了一下。其實(shí)后面還有個(gè) evaluate 評(píng)估的部分(代碼如上圖所示),因?yàn)闀r(shí)間關(guān)系我就不對(duì)著代碼詳細(xì)講了,感興趣的同學(xué)可以自己下去研究(源碼見下文鏈接)。

下面我再跟大家再介紹一下循環(huán)卷積神經(jīng)網(wǎng)絡(luò)。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

剛剛大家看到的這個(gè)結(jié)構(gòu)是一個(gè)全鏈接的神經(jīng)網(wǎng)絡(luò),在圖像處理的過程中,使用全連接神經(jīng)網(wǎng)絡(luò)最大的一個(gè)問題就是它的參數(shù)太多了,這個(gè)問題可能會(huì)導(dǎo)致模型最終訓(xùn)練不好。

例如,經(jīng)常發(fā)生的,當(dāng)你的訓(xùn)練數(shù)據(jù)不足的時(shí)候,參數(shù)又太多,你就可能訓(xùn)練不出來。一個(gè)非常簡單的例子,大家可以想象 N 元的一個(gè)方程組,然后我們假設(shè)只有 N 個(gè)數(shù)據(jù),并且這些數(shù)據(jù)是完全可分的,也就是我們是可以完全求解。但完全求解可能會(huì)導(dǎo)致過擬合,因?yàn)橛?xùn)練數(shù)據(jù)在真實(shí)環(huán)境下都是有噪音的,也就是沒有辦法做到完全避免隨機(jī)因素的影響。在這種情況下如果你過于貼合訓(xùn)練數(shù)據(jù),那么就有可能沒有辦法去收斂到未知的數(shù)據(jù)。

所以這就是參數(shù)過多可能引發(fā)的問題,即過擬合和訓(xùn)練不出來。那怎樣去解決這兩個(gè)問題呢?卷積神經(jīng)網(wǎng)絡(luò)就是一個(gè)很好的方法。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

卷積神經(jīng)網(wǎng)絡(luò)就相當(dāng)于是采用一個(gè)內(nèi)核,即一個(gè)規(guī)模較小的矩陣,去處理一個(gè)比較小的區(qū)域,然后去通過移動(dòng)這個(gè)小矩陣,去處理不同的這個(gè)塊。這種方式一個(gè)直觀的一個(gè)意義就是:一般的圖像上相鄰區(qū)域的內(nèi)容是相似的。然后通過這樣的一個(gè)潛在的東西,就可以去把一個(gè)淺層的表達(dá)變成一個(gè)更深層的表達(dá)。也就是相當(dāng)于自動(dòng)從圖像中去提取特征。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

例如上圖所示,第一層可能可以從圖像中提取一些線條和斑點(diǎn),第二層提取一些更復(fù)雜的性狀。第三層和第四層,層數(shù)越多,提取的特征就會(huì)越復(fù)雜。然后通過最后提取出來的這樣一些特征,我們再去做一個(gè)全連接的分類,最后這個(gè)分類的效果也就會(huì)更好。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

然后這里給出了一個(gè)簡單的 LeNet5 的模型,我們可以看到他的大致結(jié)構(gòu)就是從輸入層,經(jīng)過不斷地卷積池化,再經(jīng)過 1 到 3 層不等的全連接層,最后得到輸出層。其實(shí)現(xiàn)在很多的卷積神經(jīng)網(wǎng)絡(luò)基本上也都保留了這樣的一種結(jié)構(gòu)。

除了這種模型之外,另一種比較特殊的模型是 Google Inception 模型,這里因?yàn)闀r(shí)間關(guān)系我也不去做過多的介紹了。

然后我在這里給出了一個(gè)簡單的用 TensorFlow 的程序來實(shí)現(xiàn)卷積層。通過代碼其實(shí)大家也可以看到,在這個(gè)框架里面,無論是全連接的神經(jīng)網(wǎng)絡(luò)也好,還是卷積神經(jīng)網(wǎng)絡(luò)也好,甚至循環(huán)神經(jīng)網(wǎng)絡(luò)也好。它們的訓(xùn)練過程,以及前面的準(zhǔn)備過程其實(shí)基本上都是差不多的,你基本上只要去修改,怎么樣去從輸入得到輸出就可以了。

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

從代碼也可以看到,開始是定義這個(gè)卷積層中的權(quán)重和偏移量,完了之后 TensorFlow 會(huì)對(duì)這個(gè)卷積層有一個(gè)封裝,然后通過 conv2d 函數(shù)得到一個(gè) 2D 的卷積層,然后再把偏移量、激活函數(shù)加上去。大家可以看到整個(gè)的過程還是比較簡單的,同樣的,如果用 Keras 等更高級(jí)的封裝來實(shí)現(xiàn)的化會(huì)更加簡單。

最后我要推薦一下《TensorFlow:實(shí)戰(zhàn)Google深度學(xué)習(xí)框架》這本書,今天講的內(nèi)容,包括一些略去的內(nèi)容,基本上全部在這本書里都有非常詳細(xì)的介紹。

另外,前面提到的代碼地址如下:

https://github.com/caicloud/tensorflow-tutorial 

代碼庫里包含了書中所有的樣例代碼,此外還包括了才云科技提供的 TensorFlow as a Service (TaaS) 深度學(xué)習(xí)平臺(tái)的一些教程和代碼,包括后面我們做的一些圖像分類和圖像識(shí)別的樣例代碼,后面也都會(huì)陸陸續(xù)續(xù)添加進(jìn)去。大家有興趣的化可以關(guān)注一下這個(gè)代碼庫。

今天的分享就到這里,謝謝大家!

  群友問題解答

問題1:麻煩老師推薦下 Coursera 的機(jī)器學(xué)習(xí)公開課?

答:吳恩達(dá)的“機(jī)器學(xué)習(xí) Machine Learning”非常值得推薦的,那門課我個(gè)人至少看了兩到三遍,而且在不同的階段看都會(huì)有不同的感受。

網(wǎng)址:https://www.coursera.org/learn/machine-learning 

編者按:更多機(jī)器學(xué)習(xí)的精品公開課匯總,詳見雷鋒網(wǎng)相關(guān)文章“開發(fā)者入門必讀:最值得看的十大機(jī)器學(xué)習(xí)公開課”。

文章鏈接:http://www.ozgbdpf.cn/news/201701/0milWCyQO4ZbBvuW.html 

問題2:請(qǐng)問 TensorFlow 相比較 Keras 有什么優(yōu)勢?

答:Keras 是對(duì)于 TensorFlow 一個(gè)更高層的封裝,它幾乎可以實(shí)現(xiàn) TensorFlow 的所有功能,TensorFlow 則是更底層更加靈活的一個(gè)工具,相對(duì)來說 TensorFlow 的功能可能更全。但 Keras 一個(gè)最大的問題在于,目前不支持分布式,我們希望 Keras 在未來的版本更新中能夠加入相關(guān)的特性支持。學(xué)習(xí)的話,可以先從 Keras 入手,因?yàn)樗?TensorFlow 沒有本質(zhì)的區(qū)別,它只是 TensorFlow 的一個(gè)高層封裝,寫起代碼來會(huì)更加方便。

問題3:AI 學(xué)習(xí)最主要的是算法和建模對(duì)不對(duì)呀?

答:算法和模型只是一個(gè)方面,但其實(shí)我還是比較推薦做一些實(shí)戰(zhàn)的應(yīng)用,關(guān)鍵還是看你要做什么事情。如果你是要做學(xué)術(shù)研究,那就要多看論文,如果你是要做工程或者要找工作的話,建議你多做一些 Kaggle 的比賽。

問題4:TensorFlow 在推薦系統(tǒng)上的運(yùn)用如何?

答:TensorFlow 官方有一個(gè) Wide & Deep 的教程,是關(guān)于谷歌 App 推薦的一些內(nèi)容,可以關(guān)注一下。TensorFlow 是一個(gè)兼容的框架,可以被應(yīng)用在許多問題上,其實(shí)更多的是關(guān)于深度學(xué)習(xí)技術(shù)的應(yīng)用,現(xiàn)在學(xué)術(shù)界有許多相關(guān)的研究,大家可以關(guān)注一下。

Wide & Deep 鏈接:https://www.tensorflow.org/tutorials/wide_and_deep 

問題5:請(qǐng)問 TensorFlow 相比較 Caffe 有什么不同?

答:TensorFlow 是一個(gè)相對(duì)更全面的工具,但是在圖像處理上它的表現(xiàn)不如 Caffe 成熟,處理速度也會(huì)稍微慢一點(diǎn)。TensorFlow 相比 Caffe 的優(yōu)點(diǎn)是支持分布式,而且發(fā)展的速度也比 Caffe 更快。

問題6:TensorFlow 實(shí)質(zhì)是通過大量訓(xùn)練數(shù)據(jù)(監(jiān)督學(xué)習(xí))和神經(jīng)網(wǎng)絡(luò)算法,實(shí)現(xiàn)深度學(xué)習(xí)過程。未來能不能不需要大量訓(xùn)練數(shù)據(jù),即非監(jiān)督學(xué)習(xí)的辦法就可以實(shí)現(xiàn)深度學(xué)習(xí)的過程或工具,Google 等巨頭有這方面的嘗試或計(jì)劃嗎?

答:非監(jiān)督式學(xué)習(xí)包括增強(qiáng)學(xué)習(xí)其實(shí)也有嘗試,它們其實(shí)也都可以通過 TensorFlow 來實(shí)現(xiàn),具體怎么做大家可以參考官網(wǎng)的教程。TensorFlow 主要還是提供了一個(gè)計(jì)算框架,可以實(shí)現(xiàn)和神經(jīng)網(wǎng)絡(luò)相關(guān)的幾乎所有算法。

問題7:TensorFlow 既然支持分布式,那 TensorFlow On Spark 的意義還大嗎?

答:TensorFlow 支持的分布式其實(shí)只是一個(gè)計(jì)算框架,TensorFlow On Spark 的意義還是有的,但我覺得沒有 TensorFlow On Kubernetes 的意義大,Spark 主要是做了一個(gè)調(diào)度和管理的系統(tǒng),但是性能損失比較大,目前成熟的應(yīng)用也比較少。大家如果想要了解更多分布式 TensorFlow 的內(nèi)容,可以關(guān)注才云科技的平臺(tái)。

問題8:我目前在用 Caffe,想著要不要轉(zhuǎn) TensorFlow,老師有什么建議么?

答:我覺得轉(zhuǎn) TensorFlow 還是有意義的,主要還是你具體用 TensorFlow 來做什么。可能因?yàn)槲医佑| TensorFlow 比較多,但是我個(gè)人認(rèn)為 Caffe 其實(shí)正處在一個(gè)慢慢的被淘汰的邊緣。而且目前客觀上講 TensorFlow 的確是一個(gè)無論在工業(yè)上還是學(xué)術(shù)上都非常流行的框架。

溫馨提示:需要原版 PPT 和視頻鏈接的朋友可以關(guān)注 AI 研習(xí)社公眾號(hào)(微信號(hào):okweiwu),回復(fù)“鄭澤宇”即可。

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

從原理到代碼:大牛教你如何用 TensorFlow 親手搭建一套圖像識(shí)別模塊 | AI 研習(xí)社

分享:
相關(guān)文章

編輯

歡迎交流,微信:whl123465
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說