真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

這篇文章給大家介紹Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

公司主營(yíng)業(yè)務(wù):成都網(wǎng)站制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)推出唐縣免費(fèi)做網(wǎng)站回饋大家。

深度學(xué)習(xí)最令人興奮的領(lǐng)域之一就是計(jì)算機(jī)視覺。通過卷積神經(jīng)網(wǎng)絡(luò),我們已經(jīng)能夠創(chuàng)建自動(dòng)駕駛汽車系統(tǒng)、面部檢測(cè)系統(tǒng)和自動(dòng)醫(yī)學(xué)圖像分析等等。我將向你展示卷積神經(jīng)網(wǎng)絡(luò)的基本原理以及如何自己創(chuàng)建一個(gè)對(duì)手寫數(shù)字進(jìn)行分類的系統(tǒng)。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的cdn.com/f6b247650f1d689504cfca4e25034dcb51025592.jpeg">

卷積神經(jīng)網(wǎng)絡(luò)的功能似乎是人類大腦中生物功能的復(fù)制,早在1959年,David Hubel和Torsten Wiesel對(duì)貓和猴進(jìn)行了研究,這些研究揭示了動(dòng)物視覺皮層的功能。他們發(fā)現(xiàn)的是,許多神經(jīng)元具有小的局部接受性,即僅對(duì)整個(gè)視野的一小塊有限區(qū)域起反應(yīng)。他們發(fā)現(xiàn)某些神經(jīng)元會(huì)對(duì)某些特定模式做出反應(yīng),例如水平線、垂直線和其他圓形。他們還發(fā)現(xiàn)其他神經(jīng)元具有更大的感受野并且被更復(fù)雜的模式刺激,這些模式是由較低水平神經(jīng)元收集的信息組合。這些發(fā)現(xiàn)奠定了我們現(xiàn)在稱之為卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)。接下來,我們逐一介紹卷積神經(jīng)網(wǎng)絡(luò)的組成。

1、卷積層

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

卷積神經(jīng)網(wǎng)絡(luò)中每層卷積層由若干卷積單元組成,每個(gè)卷積單元的參數(shù)都是通過反向傳播算法最佳化得到的。卷積運(yùn)算的目的是提取輸入的不同特征,第一層卷積層可能只能提取一些低級(jí)的特征如邊緣、線條和角等層級(jí),更多層的網(wǎng)路能從低級(jí)特征中迭代提取更復(fù)雜的特征。你可以將每個(gè)過濾器描繪成一個(gè)窗口,該窗口在圖像的尺寸上滑動(dòng)并檢測(cè)屬性。濾鏡在圖像上滑動(dòng)的像素?cái)?shù)量稱為步幅。步幅為1意味著濾波器一次移動(dòng)一個(gè)像素,其中2的步幅將向前跳過2個(gè)像素。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

在上面的例子中,我們可以看到一個(gè)垂直線檢測(cè)器。原始圖像為6x6,它使用3x3濾鏡進(jìn)行掃描,步長(zhǎng)為1,從而產(chǎn)生4x4尺寸輸出。而過濾器僅對(duì)其視野左右列中的部分感興趣。通過對(duì)圖像的輸入求和并乘以3×3濾波器的配置,我們得到3+1+2-1-7-5=-7。然后濾波器向右移動(dòng)一步,然后計(jì)算1+0+3-2-3-1=-2。-2然后進(jìn)入-7右側(cè)的位置。此過程將持續(xù)到4x4網(wǎng)格完成為止。之后,下一個(gè)特征圖將使用它自己的唯一過濾器/內(nèi)核矩陣計(jì)算自己的值。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

2.池化層

池化層的目標(biāo)是通過聚合卷積層收集的值或所謂的子采樣來進(jìn)一步降低維度。除了為模型提供一些正則化的方案以避免過度擬合之外,這還將減少計(jì)算量。它們遵循與卷積層相同的滑動(dòng)窗口思想,但不是計(jì)算所有值,而是選擇其輸入的最大值或平均值。這分別稱為最大池化和平均池化。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

這兩個(gè)組件是卷積層的關(guān)鍵構(gòu)建塊。然后,你通常會(huì)重復(fù)此方法,進(jìn)一步減少特征圖的尺寸,但會(huì)增加其深度。每個(gè)特征圖將專門識(shí)別它自己獨(dú)特的形狀。在卷積結(jié)束時(shí),會(huì)放置一個(gè)完全連接的圖層,其具有激活功能,例如Relu或Selu,用于將尺寸重新整形為適合的尺寸送入分類器。例如,如果你的最終轉(zhuǎn)換層為3x3x128矩陣,但你只預(yù)測(cè)10個(gè)不同的類,則需要將其重新整形為1x1152向量,并在輸入分類器之前逐漸減小其大小。完全連接的層也將學(xué)習(xí)它們自己的特征,如在典型的深度神經(jīng)網(wǎng)絡(luò)中。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

現(xiàn)在讓我們看看在MNIST手寫數(shù)字?jǐn)?shù)據(jù)集上的Tensorflow中的實(shí)現(xiàn)。首先,我們將加載我們的庫。使用sklearn中的fetch_mldata,我們加載mnist數(shù)據(jù)集并將圖像和標(biāo)簽分配給x和y變量。然后我們將創(chuàng)建我們的訓(xùn)練/測(cè)試裝置。最后,我們將舉幾個(gè)例子來了解任務(wù)。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

接下來,我們將進(jìn)行一些數(shù)據(jù)增強(qiáng),這是提高模型性能的可靠方法。通過創(chuàng)建訓(xùn)練圖像的輕微變化,可以為模型創(chuàng)建正則化。我們將使用Scipy的ndimage模塊將圖像向右、向左、向上和向下移動(dòng)1個(gè)像素。這不僅提供了更多種類的例子,而且還會(huì)大大增加我們訓(xùn)練集的大小。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

我將向你展示的最后一種數(shù)據(jù)增強(qiáng)的方式:使用cv2庫創(chuàng)建圖像的水平翻轉(zhuǎn)。我們還需要為這些翻轉(zhuǎn)圖像創(chuàng)建新標(biāo)簽,這與復(fù)制原始標(biāo)簽一樣簡(jiǎn)單。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

設(shè)置“flipCode = 0”將產(chǎn)生垂直翻轉(zhuǎn)

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

接下來,我們將創(chuàng)建一個(gè)輔助函數(shù),用于將隨機(jī)微型批次提供給我們的神經(jīng)網(wǎng)絡(luò)輸入。由于卷積層的性質(zhì),它們?cè)谇跋蚝秃笙騻鞑ゲ襟E期間需要大量的存儲(chǔ)器。考慮具有4x4濾鏡的圖層,輸出128步幅為1的特征圖和具有尺寸299x299的RGB圖像輸入的SAME填充。參數(shù)的數(shù)量將相等(4x4x3+1)x128 = 6272.現(xiàn)在考慮這128個(gè)特征圖中的每一個(gè)都計(jì)算299x299個(gè)神經(jīng)元,并且這些神經(jīng)元中的每一個(gè)都計(jì)算4x4x3輸入的加權(quán)和。這意味著我們需要4x4x3x299x299x150=643,687,200次計(jì)算,這只是一個(gè)訓(xùn)練的例子。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

現(xiàn)在我們開始創(chuàng)建我們的網(wǎng)絡(luò)架構(gòu)。首先,我們?yōu)槲覀兊呐嘤?xùn)數(shù)據(jù)/特征創(chuàng)建占位符。我們需要將它們重新整形為(-1,28,28,1)矩陣,因?yàn)閠ensorflow conv2d層需要4維輸入。我們將第一個(gè)維度設(shè)置為“null”,以允許將任意批量大小提供給占位符。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

接著我們?cè)O(shè)計(jì)我們的卷積層,我是從Le-NET5(由Yann LeCun開創(chuàng))網(wǎng)絡(luò)架構(gòu)中獲取靈感,該架構(gòu)因其在手寫數(shù)字分類方面成功而聞名。我建議你研究Le-NET5以及其他經(jīng)過驗(yàn)證的模型,這樣就可以了解哪種卷積網(wǎng)絡(luò)適用于不同的任務(wù)。鏈接:http://yann.lecun.com/exdb/publis/pdf/lecun-01a.pdf。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

我們模型卷積層的第一層由12個(gè)特征圖組成,使用3x3過濾器,步幅為1。我們選擇了SAME填充,通過在輸入周圍添加一個(gè)零填充來保持圖像的尺寸。然后,我們?cè)O(shè)置最大池化層使用3x3過濾器,步幅為1,這將輸出13x13x12矩陣。所以我們從一個(gè)28x28x1的圖像開始,然后我們將這個(gè)矩陣傳遞給第二個(gè)轉(zhuǎn)換層,第二個(gè)轉(zhuǎn)換層具有3x3過濾器的深度,stride=1和SAME填充。這將輸出一個(gè)6*6*16維矩陣。你可以看到我們正在縮小特征圖的維度空間,但要更深入。接下來,我們使用Selu函數(shù)激活兩個(gè)密集層來減少每層輸入的數(shù)量大約一半,直到最終將它們輸入我們的logits。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

接著我們創(chuàng)建我們的損失函數(shù),在這種情況下,它將是softmax交叉熵,它將輸出多類概率。你可以將交叉熵視為各種數(shù)據(jù)點(diǎn)之間距離的度量。我們選擇AdamOptimizer(自適應(yīng)矩估計(jì)),當(dāng)梯度下降時(shí)自動(dòng)調(diào)整它的學(xué)習(xí)率。最后,我們創(chuàng)建了一種評(píng)估結(jié)果的方法。Tensorflow的in_top_k函數(shù)將計(jì)算我們的logits并選擇最高分。然后我們使用我們的準(zhǔn)確度變量輸出0-1%之間的百分比。

現(xiàn)在我們已經(jīng)為訓(xùn)練階段做好了準(zhǔn)備,讓我們看看我們的模型表現(xiàn)得如何。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

在第19epoch,我們的正確率在0.9907。這已經(jīng)比任何機(jī)器學(xué)習(xí)算法的結(jié)果更好,因此卷積已經(jīng)取得了領(lǐng)先?,F(xiàn)在讓我們嘗試使用我們的移位功能/翻轉(zhuǎn)功能,并為我們的網(wǎng)絡(luò)添加兩個(gè)新元素:dropout和批量標(biāo)準(zhǔn)化。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

我們使用placeholder_with_default節(jié)點(diǎn)修改現(xiàn)有占位符,這些節(jié)點(diǎn)將保存批量標(biāo)準(zhǔn)化和dropout層生成的值。在訓(xùn)練期間,我們將這些值設(shè)置為True,在測(cè)試期間,我們將通過設(shè)置為False將其關(guān)閉。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

批量標(biāo)準(zhǔn)化只是簡(jiǎn)單地對(duì)每批次的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化。我們指定了0.9的動(dòng)量。而dropout和正則化指定動(dòng)量為1才能在訓(xùn)練期間完全隨機(jī)地關(guān)閉節(jié)點(diǎn)。這導(dǎo)致其余節(jié)點(diǎn)必須松弛,從而提高其有效性。想象一下,一家公司決定每周隨機(jī)選擇50名員工留在家里。其余的工作人員將不得不有效地處理額外的工作,提高他們?cè)谄渌I(lǐng)域的技能。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

接著我們創(chuàng)建我們的損失函數(shù),訓(xùn)練步驟和評(píng)估步驟,然后對(duì)我們的執(zhí)行階段進(jìn)行一些修改。通過批量標(biāo)準(zhǔn)化執(zhí)行的計(jì)算在每次迭代期間保存為更新操作。為了訪問這些,我們分配一個(gè)變量extra_update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)。在我們的訓(xùn)練操作期間,我們將其作為列表項(xiàng)與training_op一起提供給sess.run。最后,在執(zhí)行驗(yàn)證/測(cè)試預(yù)測(cè)時(shí),我們通過feed_dict為占位符分配False值。我們不希望在預(yù)測(cè)階段有任何隨機(jī)化。為了獲得輸出,我們使用我們的測(cè)試集運(yùn)行l(wèi)ogits操作。讓我們看看這個(gè)模型添加正則化/標(biāo)準(zhǔn)化并且正在使用增強(qiáng)數(shù)據(jù)的方法后表現(xiàn)得如何。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

在29epoch,我們?cè)?0,000個(gè)數(shù)字的測(cè)試集上達(dá)到了99.5%的準(zhǔn)確率。正如你所看到的那樣,第二個(gè)epoch時(shí)模型精確度達(dá)到了99%,而之前的模型只有16%。雖然0.05%可能不是很多,但在處理大量數(shù)據(jù)時(shí)這是一個(gè)重大改進(jìn)。最后,我將向你展示如何在logits輸出上使用np.argmax產(chǎn)生的預(yù)測(cè)。

Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的

關(guān)于Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


分享標(biāo)題:Tensorflow中CNN入門的手寫數(shù)字識(shí)別是怎樣的
文章URL:http://weahome.cn/article/pgdscc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部