ImageNet冠軍領(lǐng)隊(duì)帶你入門(mén)計(jì)算機(jī)視覺(jué):監(jiān)督學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)單實(shí)現(xiàn)

姓名:張慶慶

學(xué)號(hào):19021211151

嵌牛導(dǎo)讀:機(jī)器學(xué)習(xí)計(jì)算機(jī)視覺(jué)的發(fā)展以及監(jiān)督學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)的基本原理

?嵌牛鼻子:計(jì)算機(jī)視覺(jué) 監(jiān)督學(xué)習(xí) 神經(jīng)網(wǎng)絡(luò)

嵌牛提問(wèn):什么是計(jì)算機(jī)視覺(jué),神經(jīng)網(wǎng)絡(luò)及監(jiān)督學(xué)習(xí)的基本理論有哪些

轉(zhuǎn)載源:ImageNet冠軍領(lǐng)隊(duì)帶你入門(mén)計(jì)算機(jī)視覺(jué):監(jiān)督學(xué)習(xí)與神經(jīng)網(wǎng)絡(luò)的簡(jiǎn)單實(shí)現(xiàn) - 簡(jiǎn)書(shū)

原作者 | 董健,原編輯 | Vincent

嵌牛正文:

AI 前線導(dǎo)語(yǔ):近幾年,人工智能的浪潮席卷了整個(gè)科技圈。Google,F(xiàn)acebook,微軟,百度等全球最頂尖的科技公司都將目光轉(zhuǎn)向了人工智能,并將之視為今后的戰(zhàn)略重心。 隨著人臉識(shí)別,輔助駕駛,AlphaGo 等應(yīng)用的不斷涌現(xiàn),基于學(xué)習(xí)的計(jì)算機(jī)視覺(jué)(learning based vision)正在越來(lái)越多的改變我們的生活 。本系列文章,將逐步介紹這些看似神奇的系統(tǒng)背后的視覺(jué)算法原理。

本文是整個(gè)系列的第一篇文章,將會(huì)簡(jiǎn)單介紹一下計(jì)算機(jī)視覺(jué)的發(fā)展,以及監(jiān)督學(xué)習(xí)、神經(jīng)網(wǎng)絡(luò)的基本原理。最后的實(shí)踐部分,會(huì)用 TensorFlow 給出之前介紹算法的一個(gè)簡(jiǎn)單實(shí)現(xiàn)。

計(jì)算機(jī)視覺(jué)的發(fā)展

什么是計(jì)算機(jī)視覺(jué)? 首先我們看一下維基百科的定義:

Computer vision is an interdisciplinary field that deals with how computers can be made for gaining high-level understanding from digital images or videos.

簡(jiǎn)單來(lái)說(shuō),計(jì)算機(jī)視覺(jué)就是讓機(jī)器能自動(dòng)的理解圖片或視頻。

計(jì)算機(jī)視覺(jué)的起源可以追溯到 1966 年,當(dāng)時(shí) MIT 著名的工智能專(zhuān)家 Marvin Minsky 給他的本科學(xué)生留了一個(gè)暑期作業(yè) -“Link a camera to a computer and get the computer to describe what it saw”。 雖然人可以很容易的理解圖片,但事實(shí)證明,讓計(jì)算機(jī)理解圖片遠(yuǎn)比我們一開(kāi)始想象的復(fù)雜。

早期的計(jì)算機(jī)視覺(jué)研究,由于計(jì)算資源和數(shù)據(jù)的原因,主要集中在幾何和推理。 上世紀(jì) 90 年代,由于計(jì)算機(jī)硬件的不斷發(fā)展和數(shù)字照相機(jī)的逐漸普及,計(jì)算機(jī)視覺(jué)進(jìn)入了快速發(fā)展期。 這期間的一大突破是各種人工設(shè)計(jì)特征的涌現(xiàn),例如 SIFT,HOG 等局部特征。 這些特征相對(duì)原始像素具有對(duì)尺度,旋轉(zhuǎn)等的魯棒性,因此得到了廣泛的應(yīng)用,催生了如圖像拼接、圖像檢索、三位重建等視覺(jué)應(yīng)用。 另一大突破是基于統(tǒng)計(jì)和機(jī)器學(xué)習(xí)的方法的流行。隨著數(shù)字照片的不斷普及,大規(guī)模的數(shù)據(jù)集也相伴而生,基于學(xué)習(xí)的計(jì)算機(jī)視覺(jué)(Learning based Vision),由于可以通過(guò)大量數(shù)據(jù)自動(dòng)學(xué)習(xí)模型參數(shù),漸漸的成為了主流。

隨著計(jì)算能力的不斷進(jìn)步和海量互聯(lián)網(wǎng)數(shù)據(jù)的產(chǎn)生,傳統(tǒng)的基于人工特征和 SVM/boosting 等簡(jiǎn)單機(jī)器學(xué)習(xí)算法的視覺(jué)技術(shù)遇到了瓶頸。因此,工業(yè)界和學(xué)術(shù)界都在探索如何避免繁瑣的人工特征設(shè)計(jì)同時(shí)加強(qiáng)模型的擬合性能,從而進(jìn)一步利用海量數(shù)據(jù)。深度學(xué)習(xí)很好的滿足了這一需求,因此在視覺(jué)領(lǐng)域得到了非常廣泛的應(yīng)用。2010 年之后,計(jì)算機(jī)視覺(jué)逐漸進(jìn)入了深度學(xué)習(xí)的時(shí)代。標(biāo)志性的事件是 ImageNet 2012 比賽。這次比賽中,基于深度學(xué)習(xí)的算法大大超過(guò)了經(jīng)過(guò)精心設(shè)計(jì)的傳統(tǒng)算法,震驚了整個(gè)學(xué)術(shù)界,進(jìn)而帶動(dòng)了深度學(xué)習(xí)在其他領(lǐng)域中的應(yīng)用。這次比賽也被看成是深度學(xué)習(xí)在整個(gè)人工智能領(lǐng)域復(fù)興的標(biāo)志性事件。

目前,除了三維重建等 low-level vision 問(wèn)題,基于深度學(xué)習(xí)的算法,在大多數(shù)視覺(jué)問(wèn)題上的性能已經(jīng)遠(yuǎn)遠(yuǎn)超過(guò)了傳統(tǒng)算法,因此本系列文章會(huì)重點(diǎn)介紹基于深度學(xué)習(xí)的計(jì)算機(jī)視覺(jué)算法。

神經(jīng)網(wǎng)絡(luò) (neural network)

神經(jīng)網(wǎng)絡(luò)(NN),簡(jiǎn)單來(lái)說(shuō)就是神經(jīng)元組成的網(wǎng)絡(luò),是最早出現(xiàn),也是最簡(jiǎn)單的一種深度學(xué)習(xí)模型。其他很多更復(fù)雜的算法比如卷積神經(jīng)網(wǎng)絡(luò),深度增強(qiáng)學(xué)習(xí)中的許多概念都來(lái)源于神經(jīng)網(wǎng)絡(luò)。因此,我們?cè)谶@篇文章中先介紹一下神經(jīng)網(wǎng)絡(luò)的原理。 要理解神經(jīng)網(wǎng)絡(luò),我們需要先了解什么是神經(jīng)元。

神經(jīng)元 & 感知器

神經(jīng)元(neuron)是神經(jīng)網(wǎng)絡(luò)的最小單位。每個(gè)神經(jīng)元將多個(gè)入映射到一個(gè)輸出。如圖所示,神經(jīng)元的輸出是輸入的加權(quán)和加上偏置,再通過(guò)一個(gè)激活函數(shù)。具體可以表示成:

激活函數(shù) φ 有各種不同的形式。如果使用 step 函數(shù),那神經(jīng)元等價(jià)于一個(gè)線性分類(lèi)器:

這個(gè)分類(lèi)器在歷史上被稱(chēng)為感知器(Perceptron)。

多層神經(jīng)網(wǎng)絡(luò)

單層的感知器只能解決線性可分的問(wèn)題。但實(shí)際中絕大多數(shù)問(wèn)題都是非線性的,這時(shí)單層感知器就無(wú)能為力了。 為此,我們可以把單個(gè)的 neuron 組成網(wǎng)絡(luò),讓前一層 neuron 的輸出做為下一層 neuron 的輸入。組成如下圖所示的神經(jīng)網(wǎng)絡(luò):

由于非線性激活函數(shù)的存在,多層神經(jīng)網(wǎng)絡(luò)就有了擬合非線性函數(shù)的能力。由于歷史的原因,多層神經(jīng)網(wǎng)絡(luò)也被稱(chēng)為 multilayer perceptrons(MLP)。

神經(jīng)網(wǎng)絡(luò)具有擬合非線性函數(shù)的能力。但是為了擬合不同的非線性函數(shù),我們是否需要設(shè)計(jì)不同的非線性激活函數(shù)和網(wǎng)絡(luò)結(jié)構(gòu)呢?

答案是不需要。

universal approximation theorem已經(jīng)證明,前向神經(jīng)網(wǎng)絡(luò)是一個(gè)通用的近似框架。 簡(jiǎn)單來(lái)說(shuō),對(duì)常用的 sigmoid,relu 等激活函數(shù),即使只有一層隱藏層的神經(jīng)網(wǎng)絡(luò),只要有足夠多的神經(jīng)元,就可以無(wú)限逼近任何連續(xù)函數(shù)。在實(shí)際中,淺層神經(jīng)網(wǎng)絡(luò)要逼近復(fù)雜非線性函數(shù)需要的神經(jīng)元可能會(huì)過(guò)多,從而提升了學(xué)習(xí)的難度并影響泛化性能。因此,我們往往通過(guò)使用更深的模型,從而減少所需神經(jīng)元的數(shù)量,提升網(wǎng)絡(luò)的泛化能力。

機(jī)器學(xué)習(xí)的基本概念

深度神經(jīng)網(wǎng)絡(luò)是深度學(xué)習(xí)中的一類(lèi)算法,而深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的一種特例。因此,這一節(jié)我們?cè)跈C(jī)器學(xué)習(xí)的一般框架下,介紹模型訓(xùn)練相關(guān)的基本概念,及其在 Tensorflow 中的實(shí)現(xiàn)。相關(guān)概念適用于包括 NN 在內(nèi)的機(jī)器學(xué)習(xí)算法。

機(jī)器學(xué)習(xí)的常見(jiàn)問(wèn)題

常見(jiàn)的機(jī)器學(xué)習(xí)問(wèn)題,可以抽象為 4 大類(lèi)問(wèn)題:

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

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

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

4、增強(qiáng)學(xué)習(xí)

根據(jù)訓(xùn)練數(shù)據(jù)是否有 label,可以將問(wèn)題分為監(jiān)督學(xué)習(xí)(所有數(shù)據(jù)都有 label),半監(jiān)督學(xué)習(xí)(部分?jǐn)?shù)據(jù)有 label)和非監(jiān)督學(xué)習(xí)(所有數(shù)據(jù)都沒(méi)有 label)。 增強(qiáng)學(xué)習(xí)不同于前 3 種問(wèn)題,增強(qiáng)學(xué)習(xí)也會(huì)對(duì)行為給出反饋(reward),但關(guān)注的是如何在環(huán)境中采取一系列行為,從而獲得最大的累積回報(bào)。監(jiān)督學(xué)習(xí)是目前應(yīng)用最廣泛,也是研究最充分的機(jī)器學(xué)習(xí)問(wèn)題,本文接下來(lái)將重點(diǎn)介紹監(jiān)督學(xué)習(xí)。

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

在監(jiān)督學(xué)習(xí)中,給定 N 個(gè)訓(xùn)練樣本

我們的目標(biāo)是得到一個(gè)從輸入到輸出的函數(shù):

實(shí)際中,我們通常不會(huì)直接優(yōu)化函數(shù) f,而是根據(jù)問(wèn)題的具體情況,選擇一組參數(shù)化的函數(shù) fθ, 將優(yōu)化函數(shù) f 轉(zhuǎn)換成優(yōu)化參數(shù)θ。

常見(jiàn)的分類(lèi)問(wèn)題和回歸問(wèn)題,都是監(jiān)督學(xué)習(xí)的一種特例。線性分類(lèi)器,深度神經(jīng)網(wǎng)絡(luò)等模型,都是為了解決這些問(wèn)題設(shè)計(jì)的參數(shù)化后的函數(shù)。為了簡(jiǎn)單,我們以線性分類(lèi)器

為例,需要優(yōu)化的參數(shù)θ為 (w,b)。

損失函數(shù)

為了衡量函數(shù)的好壞,我們需要一個(gè)客觀的標(biāo)準(zhǔn)。 在監(jiān)督學(xué)習(xí)中,這個(gè)評(píng)判標(biāo)準(zhǔn)通常是一個(gè)損失函數(shù)

對(duì)一個(gè)訓(xùn)練樣本

模型的預(yù)測(cè)結(jié)果為 y^,那對(duì)應(yīng)的損失為

損失越小,表明函數(shù)預(yù)測(cè)的結(jié)果越準(zhǔn)確。實(shí)際中,需要根據(jù)問(wèn)題的特點(diǎn),選擇不同的損失函數(shù)。

二分類(lèi)問(wèn)題中,常用的 logistic regression 采用 sigmoid + cross entroy 作為 loss。對(duì)常見(jiàn)的 loss,tensorflow 都提供了相應(yīng)的函數(shù)。

loss = tf.nn.sigmoid_cross_entropy_with_logits(labels=labels, logits=y)

對(duì)多分類(lèi)問(wèn)題,如上圖所示,我們可以將二分類(lèi)的線性分類(lèi)器進(jìn)行擴(kuò)展為 N 個(gè)線性方程:

然后通過(guò)

進(jìn)行歸一化,歸一化后的結(jié)果作為每一類(lèi)的概率。因此,多分類(lèi)通常使用 softmax + cross entropy 作為損失函數(shù)。

loss = tf.nn.softmax_cross_entropy_with_logits(

labels=labels, logits=logits)

可以證明,對(duì)于二分類(lèi)問(wèn)題,采用 sigmoid cross entroy 和 softmax cross entory 作為 loss,在理論上是完全等價(jià)的。此外,實(shí)際中通常采用直接計(jì)算 softmax cross entropy 而不是先計(jì)算 softmax,后計(jì)算 cross entory,這主要是從數(shù)值穩(wěn)定性的角度考慮的。

損失最小化和正則項(xiàng)

在定義了損失函數(shù)之后,監(jiān)督學(xué)習(xí)問(wèn)題可以轉(zhuǎn)化為最小化實(shí)驗(yàn)損失

實(shí)際中,為了保證模型的擬合能力,函數(shù) $f$ 的復(fù)雜度有時(shí)會(huì)比較高。如最圖中最右邊情況所示,如果訓(xùn)練樣本數(shù)較少或者 label 有錯(cuò)誤時(shí),直接最小化實(shí)驗(yàn)損失而不對(duì) $f$ 加限制的話,模型容易過(guò)擬合。

因此,在樣本數(shù)量較少或者標(biāo)注質(zhì)量不高的情況下,需要額外添加正則項(xiàng)(regularizer),保證模型的泛化能力。實(shí)際中根據(jù)不同需求,可以選擇不同的正則項(xiàng)。在神經(jīng)網(wǎng)絡(luò)當(dāng)中,比較常見(jiàn)的是 l2 norm 正則項(xiàng):

在 tensorflow 中,通常有兩種方法添加正則項(xiàng)。一種是根據(jù)需要,自己實(shí)現(xiàn)相應(yīng)的 regularization loss,然后和其他 loss 相加進(jìn)行優(yōu)化。這種方法可以實(shí)現(xiàn)比較復(fù)雜的 regularizer。

weight_decay = tf.multiply(tf.nn.l2_loss(weights),

wd, name='weight_loss')

對(duì)于常見(jiàn)的正則項(xiàng),也可以使用 tensorflow 自帶的功能,對(duì)相應(yīng)的變量進(jìn)行正則化。然后將系統(tǒng)生成的所有 regularization loss 和其他 loss 相加進(jìn)行優(yōu)化。

tf.contrib.layers.apply_regularization(

tf.contrib.layers.l2_regularizer(wd), weights)

tf.losses.get_regularization_losses()

梯度下降和反向傳播

在定義了損失函數(shù)和正則項(xiàng)之后,最終正則化后的 loss 為:

有了 loss 函數(shù),相應(yīng)的參數(shù)可以通過(guò)標(biāo)準(zhǔn)的梯度下降算法進(jìn)行優(yōu)化求解。例如對(duì)線性分類(lèi)器中的 $w$,可以通過(guò)如下的公式進(jìn)行迭代更新:

通過(guò)設(shè)定合適的 learning rate,參數(shù)會(huì)逐步收斂到局部 / 全局最優(yōu)解。

反向傳播可以看成梯度下降在神經(jīng)網(wǎng)絡(luò)中的一個(gè)推廣,也是通過(guò)最小化 loss 函數(shù),計(jì)算參數(shù)相對(duì)于 loss 的梯度,然后對(duì)參數(shù)進(jìn)行迭代更新。具體的推導(dǎo)因?yàn)槠蛟谶@里略過(guò)了。在 tensorflow 中,只需要指定 loss 函數(shù)和步長(zhǎng)(learning rate),optimizer 可以自動(dòng)幫我們完成梯度下降 / 反向傳播的過(guò)程:

tf.train.GradientDescentOptimizer(

learning_rate).minimize(loss)

OCR 實(shí)戰(zhàn)

最后本文通過(guò)一個(gè) OCR 的例子,展示如何用 Tensorflow 實(shí)現(xiàn) Softmax 分類(lèi)器和 MLP 分類(lèi)器。實(shí)驗(yàn)數(shù)據(jù)集采用著名的數(shù)字識(shí)別數(shù)據(jù)集 MNIST。該數(shù)據(jù)集包含了 60000 張訓(xùn)練圖片和 10000 張測(cè)試圖片。數(shù)據(jù)集中的每一張圖片都代表了 0-9 中的一個(gè)數(shù)字,圖片的尺寸為 28×28。

Softmax 分類(lèi)器

我們首先實(shí)現(xiàn)一個(gè)簡(jiǎn)單的 Softmax 分類(lèi)器。由于 Tensorflow 運(yùn)行構(gòu)建好的網(wǎng)絡(luò)的過(guò)程比較復(fù)雜,為了提高開(kāi)發(fā)效率和代碼的復(fù)用性,我們將代碼分成了 3 個(gè)主要模塊,分別是 Dataset 模塊,Net 模塊和 Solver 模塊。

模型結(jié)構(gòu)

對(duì)每一個(gè) Net 類(lèi)里,我們需要實(shí)現(xiàn)三個(gè)函數(shù):

1、inference

我們?cè)?inference 函數(shù)中定義網(wǎng)絡(luò)的主體結(jié)構(gòu)。在 tensorflow 中,變量用 tf.Variable 表示。因?yàn)?Softmax 分類(lèi)器是一個(gè)凸函數(shù),任何初始化都可以保證達(dá)到全局最優(yōu)解,因此我們可以簡(jiǎn)單的將W和b初始化為 0。 Softmax 分類(lèi)器可以簡(jiǎn)單的通過(guò)一個(gè)矩陣乘法y = tf.matmul(data, W) + b后接一個(gè)tf.nn.softmax函數(shù)實(shí)現(xiàn)。

2、loss

按照之前介紹的,為了保證數(shù)值穩(wěn)定性,我們直接采用直接計(jì)算tf.nn.softmax_cross_entropy_with_logits的方式。

3、metric

在訓(xùn)練完模型后,我們需要在 validation 或 test 集合上驗(yàn)證模型的性能。在測(cè)試集比較大時(shí),我們無(wú)法一次得到模型在整個(gè)測(cè)試集上的結(jié)果,需要將測(cè)試集分成小的 batch,在每個(gè) batch 上進(jìn)行測(cè)試,之后將每個(gè) batch 的結(jié)果匯總起來(lái)。 為此,tensorflow 提供了 tf.metrics 模塊,可以自動(dòng)完成對(duì)每個(gè) batch 進(jìn)行評(píng)價(jià),并將所有的評(píng)價(jià)匯總的功能。在這個(gè)例子里,我們是解決分類(lèi)問(wèn)題,因此可以使用tf.metrics.accuracy計(jì)算分類(lèi)的準(zhǔn)確率。

Dataset

In versions of TensorFlow before 1.2, we recommended using multi-threaded, queue-based input pipelines for performance. Beginning with TensorFlow 1.2, however, we recommend using the tf.contrib.data module instead.

從 Tensorflow1.2 開(kāi)始,Tensorflow 提供了基于 tf.contrib.data 的新 API。相比原來(lái)基于 QuequRunner 和 Coordinator 的 API,代碼結(jié)構(gòu)簡(jiǎn)潔了很多。所以我們?cè)?Dataset 類(lèi)中采用了新的 API,實(shí)現(xiàn)數(shù)據(jù)讀取。

我們首先讀取了 numpy.array 格式的 mnist 數(shù)據(jù)集images, labels。然后通過(guò)tf.contrib.data.Dataset.from_tensor_slices將之轉(zhuǎn)換成 tf.contrib.data.Dataset 格式。之后我們可以設(shè)置對(duì) Dataset 的遍歷次數(shù)(None 代表無(wú)限次),batch size 以及是否對(duì)數(shù)據(jù)集進(jìn)行 shuffle。 最后,我們采用最簡(jiǎn)單的make_one_shot_iterator()和get_next(),得到網(wǎng)絡(luò)的基本數(shù)據(jù)單元 batch。 按默認(rèn)配置,每個(gè) batch 含有 50 張圖和其對(duì)應(yīng)的 label。

Solver

最后我們介紹 Sover 類(lèi)。Solver 類(lèi)主要包含五個(gè)函數(shù):

1、build_optimizer

因?yàn)榫W(wǎng)絡(luò)比較簡(jiǎn)單,這里我們選用最基本的隨即梯度下降算法tf.train.GradientDescentOptimizer,并使用了固定的 learning rate。

2、build_train_net、build_test_net

這兩個(gè)函數(shù)的作用類(lèi)似,都是將 Dataset 中的數(shù)據(jù)和 Net 中的網(wǎng)絡(luò)結(jié)構(gòu)串聯(lián)起來(lái)。在最后我們調(diào)用tf.summary.scalar將 loss 添加到 summary 中。 tensorflow 提供了強(qiáng)大的可視化模塊 tensorboard,可以很方便的對(duì) summary 中的變量進(jìn)行可視化。

3、train_net

在 train_net 的開(kāi)頭,我們完成了 Graph,Saver,summary 等模塊的初始化。 然后通過(guò)summary_writer.add_graph(tf.get_default_graph()),將網(wǎng)絡(luò)結(jié)構(gòu)打印到 summary 中。

之后初始化tf.Session(),并通過(guò)session.run運(yùn)行對(duì)應(yīng)的操作。在 tensorflow 使用了符號(hào)式編程的模式,創(chuàng)建 Graph 的過(guò)程只是完成了構(gòu)圖,并沒(méi)有對(duì)數(shù)據(jù)進(jìn)行實(shí)際運(yùn)算。在 Session 中運(yùn)行對(duì)應(yīng)的操作時(shí),才真正對(duì)底層數(shù)據(jù)進(jìn)行操作。

4、test_net

和 train_net 類(lèi)似,test_net 主要完成了各種模塊的初始化,之后讀取模型目錄文件下的 checkpoint 文件中記錄的最新的模型,并在測(cè)試集中進(jìn)行測(cè)試。

下圖是 tensorboad 中可視化的網(wǎng)絡(luò)結(jié)構(gòu),和 loss 的統(tǒng)計(jì)??梢钥吹?,tensorboad 對(duì)我們進(jìn)行分析提供很好的可視化支持。

最終程序的輸出結(jié)果如下:

可以看到,一個(gè)簡(jiǎn)單的線性模型可以達(dá)到 92% 的準(zhǔn)確率。我們猜測(cè)數(shù)字識(shí)別這個(gè)問(wèn)題應(yīng)該不是線性可分,因此使用更復(fù)雜的非線性分類(lèi)器應(yīng)該可以得到更好的結(jié)果。

MLP 分類(lèi)器

由于我們采用了模塊化的設(shè)計(jì),各個(gè)模塊直接基本是解耦合的。因此將 Softmax 分類(lèi)器替換成 MLP 非常容易,我們只需要重新實(shí)現(xiàn) Net 層就可以了。

為了證明 MLP 的效果,我們構(gòu)造了一個(gè)含有 2 層 hidden layer 的神經(jīng)網(wǎng)絡(luò)。代碼結(jié)構(gòu)和 Softmax 分類(lèi)其大致一樣,就不做過(guò)多解釋了。 因?yàn)榫€性層在網(wǎng)絡(luò)中多次出現(xiàn),我們將他抽象為一個(gè)可以復(fù)用的函數(shù)。 另外,為了讓 graph 在 tensorboad 中的可視化效果更好,我們將相關(guān)的變量和操作,通過(guò)with tf.variable_scope('hidden1'):放置在同一個(gè) variable_scope 下面。這樣所有相關(guān)變量和操作在 tensorboad 都會(huì)收縮成一個(gè)可以展開(kāi)的節(jié)點(diǎn),從而提供更好的可視化效果。

最終的網(wǎng)絡(luò)結(jié)果和運(yùn)行結(jié)果如下所示:

可以看到,使用了包含 2 層 hidden layer 的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò),分類(lèi)的準(zhǔn)確率已經(jīng)提升到了 97%,大大優(yōu)于簡(jiǎn)單的線性分類(lèi)器。證明了模型選擇對(duì)最終性能的重要影響。

完整代碼下載:

https://github.com/Dong--Jian/Vision-Tutorial

嵌??偨Y(jié):本文重點(diǎn)介紹了計(jì)算機(jī)視覺(jué)的基本概念,以及神經(jīng)網(wǎng)絡(luò),監(jiān)督學(xué)習(xí)的基本理論,希望對(duì)學(xué)習(xí)深度學(xué)習(xí)的你有所幫助。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容