AI學(xué)習(xí)的基本概念
沒有AI,沒有人工智能,當(dāng)前的計算機(jī)處理不存在智能,所謂的AI,所謂的人工智能,只不過是面對一些特定問題時,采取了與傳統(tǒng)計算機(jī)處理問題不同的思路和方法。
1:傳統(tǒng)計算機(jī)對問題的解決
通過定義流程,數(shù)據(jù)結(jié)構(gòu),操作命令,設(shè)置滿足或不滿足的條件來對特定的問題進(jìn)行處理,例如,我們有一堆紅色和白色的球混合在一起,我們要進(jìn)行區(qū)分,傳統(tǒng)上我們的做法是下面的樣子:
檢查這些球,人為歸納出紅色的球具有的特征,歸納出白色的球具有的特征,然后讓計算機(jī)根據(jù)這些特征進(jìn)行判斷,如果
一個球具有歸納出的紅球特征,則認(rèn)為這個球是紅色,如果一個球具有白球特征,則認(rèn)為這個球是白色。
當(dāng)計算機(jī)的程序確定以后,只要是具有紅球特征的球被傳遞計算機(jī)后,即使該球是白色的,計算機(jī)仍然會認(rèn)為他是紅色的。
2:人工智能是如何解決這類問題
我們先找很多的白球和紅球,并且做好標(biāo)記,比如說A球是紅球,B球是白球,然后將這些球傳遞給計算機(jī),讓計算機(jī)代替人進(jìn)行這些球的特征的歸類;當(dāng)計算機(jī)利用特殊的算法進(jìn)行大量的歸類以后,我們傳遞一個新的球給計算機(jī)后,計算機(jī)就能判斷這個球是紅色或白色(當(dāng)然這樣仍然存在偏差)
所以這是一個數(shù)學(xué)或算法問題。不是傳統(tǒng)意義或科幻電影中所講的人工智能。
當(dāng)然由于互聯(lián)網(wǎng)的發(fā)展,產(chǎn)生了大量的數(shù)據(jù),從這些數(shù)據(jù)中歸納總結(jié)出一定的規(guī)則,然后將這些規(guī)則應(yīng)用到新的分析判斷上,產(chǎn)生了非常好的效果。
所以當(dāng)前所講的AI或人工智能,都屬于機(jī)器學(xué)習(xí)數(shù)據(jù)特征并總結(jié)歸納的一部分。
機(jī)器如何進(jìn)行學(xué)習(xí)
計算機(jī)通過人工定義的算法進(jìn)行學(xué)習(xí)。這樣的算法有很多,例如KNN,決策樹等。
從大的方面又劃分位有監(jiān)督學(xué)習(xí)算法和無監(jiān)督學(xué)習(xí)算法。
有監(jiān)督學(xué)習(xí)算法:對于數(shù)據(jù),由人先給出數(shù)據(jù)對應(yīng)的結(jié)果,然后由機(jī)器根據(jù)這些數(shù)據(jù)學(xué)習(xí)對應(yīng)的特點和規(guī)律,學(xué)習(xí)完成后,可以應(yīng)用到新的沒有對應(yīng)結(jié)果的數(shù)據(jù)上并可以對新數(shù)據(jù)進(jìn)行處理。
無監(jiān)督學(xué)習(xí)算法:對于數(shù)據(jù),完全讓機(jī)器根據(jù)數(shù)學(xué)規(guī)律進(jìn)行統(tǒng)計分析,人不參與對數(shù)據(jù)標(biāo)記。
總結(jié):
機(jī)器學(xué)習(xí)就是:根據(jù)給定的數(shù)據(jù)特征和結(jié)論,利用數(shù)學(xué)的方法,讓計算機(jī)找出一個這樣的函數(shù),這個函數(shù)的輸入就是數(shù)據(jù)特征,輸出就是對應(yīng)結(jié)論。當(dāng)找到這個函數(shù)以后,如果有新的數(shù)據(jù),則將新的數(shù)據(jù)代入到這個函數(shù)中,從而計算出對應(yīng)的結(jié)論。
機(jī)器學(xué)習(xí)算法
在研究機(jī)器學(xué)習(xí)算法之前,先明確一些基本的概念
1:數(shù)據(jù)特征:用于描述一條數(shù)據(jù)的一些特征屬性,例如描述一個人,可以用身高,體重,姓名的屬性來表述,這些數(shù)據(jù)就是數(shù)據(jù)的特征。
2:數(shù)據(jù)類別:根據(jù)數(shù)據(jù)的特征進(jìn)行明確的分類。比如說身高1.7,體重60KG的這個人是小明。不滿足上面這些特征的人不是小明。那么“是小明”和“不是小明”則被稱作分類。
機(jī)器學(xué)習(xí)研究中一個很重要的問題就是解決分類問題,即根據(jù)數(shù)據(jù)的特征解決數(shù)據(jù)是屬于哪個類別。機(jī)器學(xué)習(xí)中,有下面一些很經(jīng)典的分類算法:
1)? KNN緊鄰算法
2) 決策樹算法
3) 貝葉斯分類
4)? Logistic回歸
KNN算法
KNN算法可以用來解決多種類別的分類問題,該算法描述如下:
已知數(shù)據(jù)集合X,X包括若干不同的樣本{x1,x2,x3,x4…Xn}和對應(yīng)的分類結(jié)果Y,Y包括{y1,y2,y3…yn},當(dāng)出現(xiàn)新的數(shù)據(jù)A時,求A數(shù)據(jù)對應(yīng)的分類結(jié)果。
對于這樣一個問題,KNN算法通過以下方法進(jìn)行解決:
1:計算數(shù)據(jù)A與樣本集合X中所有樣本之間的距離,然后獲取距離最?。ㄌ卣髯罱咏┑腒個樣本數(shù)據(jù)對應(yīng)的分類標(biāo)簽{y1,y2,y3…}
2:從這分類標(biāo)簽中選擇最多的分類標(biāo)簽為A數(shù)據(jù)的分類標(biāo)簽。
KNN算法在執(zhí)行時一般K的選擇不會超過20.
KNN算法計算數(shù)據(jù)A與樣本集合X中不同的數(shù)據(jù)距離時,可以采取以下公式進(jìn)行。

即對應(yīng)的特征差平方和開方得到。
KNN算法python代碼實現(xiàn)(使用MINIST數(shù)據(jù)集測試驗證)



說明:KNN算法有較好的預(yù)期結(jié)果,但需要一份比較有效的數(shù)據(jù)集合,同時KNN算法在預(yù)測時需要花費(fèi)大量的時間計算待預(yù)測樣本與目標(biāo)數(shù)據(jù)集合之間的關(guān)系,對預(yù)測效率和內(nèi)存都有比較大的占用。
機(jī)器學(xué)習(xí)之線性回歸
什么是線性回歸?
回歸問題一般用于預(yù)測輸入與輸出變量之間的關(guān)系。線性回歸是用線性函數(shù)預(yù)測輸入與輸出之間的關(guān)系。下面舉個例子說明:
例如房屋面積和房屋價格之間的關(guān)系。
如果我們有某個地區(qū)房屋面積和房屋架構(gòu)的大量數(shù)據(jù),那么給出一個新的房屋后,該新房屋的價格是多少。
線性回歸即可以用來解決這類問題。
即認(rèn)為輸出結(jié)果與輸入變量之間滿足線性函數(shù)關(guān)系
Y=wX+b。
其中在以上公式中,Y是輸出結(jié)果,X是輸入變量,w和b是參數(shù)。
當(dāng)我們有大量的數(shù)據(jù)時,通過這些數(shù)據(jù)求出w和b的取值后,則能得到完整的Y=wX+b表示,這樣當(dāng)以后有新的輸入數(shù)據(jù)時,將新的數(shù)據(jù)代入該公式,就可以得到對應(yīng)結(jié)果。
以上是對線性回歸的一個簡單解釋。
那么如何根據(jù)已有數(shù)據(jù)求出對應(yīng)參數(shù)w和b。
機(jī)器學(xué)習(xí)的做法就是嘗試給w和b設(shè)置不同的取值,然后根據(jù)訓(xùn)練數(shù)據(jù)中的輸入數(shù)據(jù)X求出輸出結(jié)果Y,然后用求出的這個結(jié)果與訓(xùn)練數(shù)據(jù)中真實的結(jié)果進(jìn)行比較。如果這個差異是最小的,那么就認(rèn)為w和b的取值已經(jīng)找到。
預(yù)測結(jié)果和真實結(jié)果的比較在這里被定義為一個函數(shù)被稱為損失函數(shù)(損失函數(shù)可以根據(jù)業(yè)務(wù)場景的不同,被定義為不同的形式),機(jī)器學(xué)習(xí)的過程就是求取損失函數(shù)最小。
在線性回歸過程中,損失函數(shù)經(jīng)常使用最小二乘法。實際值與預(yù)測值之差的平方和最小。
下面通過python代碼實現(xiàn)線性回歸。
數(shù)據(jù)集的獲取和構(gòu)造
在這里我們使用sklearn庫中的波士頓房價數(shù)據(jù)集。
波士頓房價數(shù)據(jù)集合是一個包含506條記錄的數(shù)據(jù)集合,每條記錄會有13個特征,對應(yīng)價格為一個1維的數(shù)據(jù),因此我們的w參數(shù)是一個13行1列的矩陣?;趖ensorflow的代碼如下:


機(jī)器學(xué)習(xí)之邏輯回歸
邏輯回歸是一個概率模型,可以用來解決二元分類問題,在邏輯回歸中,我們認(rèn)為預(yù)測結(jié)果是通過sigmod函數(shù)運(yùn)算得到。
Sigmod函數(shù)的形式如下:

在整個實數(shù)空間上,sigmod函數(shù)的運(yùn)算結(jié)果落在0到1的區(qū)間范圍之內(nèi),當(dāng)應(yīng)用到二元分類問題時,可以做下面這樣的認(rèn)為,即如果運(yùn)算結(jié)果大于0.5,則認(rèn)為yes,如果小于0.5則認(rèn)為分類是no,當(dāng)使用邏輯回歸時,由于對應(yīng)問題是一個概率問題,因此在損失函數(shù)的選擇上,經(jīng)常選擇交叉熵作為損失函數(shù)。
交叉熵的函數(shù)形式如下:

交叉熵的更深入內(nèi)容可以參考以下博客內(nèi)容
https://blog.csdn.net/tsyccnh/article/details/79163834
下面使用sklearn數(shù)據(jù)集合中的乳腺癌數(shù)據(jù)集,基于tensorflow實現(xiàn)。
乳腺癌數(shù)據(jù)集是一個包含569條記錄的小數(shù)據(jù)集合,該數(shù)據(jù)集合中每條記錄有30個特征。


機(jī)器學(xué)習(xí)之決策樹模型
在實現(xiàn)決策樹模型之前,先需要了解信息的熵,熵被定義為信息的期望值,下面說明信息熵的計算方法:
???????? 假如事件發(fā)生的可能性包括A,B,C三類;那么計算分類A的熵按照以下方式
???????? L(A) = -log2P(A)
???????? 其中L(A)為分類A的熵。P(A)為事件發(fā)生后是A類的概率(可能性)。那么所有類別的熵計算方式如下:
???????? H = -∑P(xi)log2P(xi)? 其中P(xi)為i類別的概率。
如果給出一份待訓(xùn)練的數(shù)據(jù)集合,則可以根據(jù)以上公式計算出該數(shù)據(jù)集的信息熵,計算規(guī)則如下:
???????? 1:根據(jù)分類標(biāo)簽,計算不同分類下的概率P
???????? 2:利用最大熵計算原則計算該數(shù)據(jù)集的熵。
???????? 以上是信息熵的基本概念。
下面說明信息增益的概念:
???????? 信息增益是對信息前后變化量的描述,其計算方式為
???????? 數(shù)據(jù)變化前的信息熵與數(shù)據(jù)變化后的信息熵之差,如果信息增益越大,說明變化后的數(shù)據(jù)信息熵減少,其數(shù)據(jù)更加有序,價值更高。
什么是決策樹。
決策樹是一個樹形結(jié)構(gòu),該樹的每個分支對應(yīng)一個判斷條件,從樹的根節(jié)點出發(fā),通過一層又一層的分支進(jìn)行判斷,最終行進(jìn)到葉子節(jié)點,該葉子節(jié)點對應(yīng)哪個決策結(jié)果。這樣的一個過程被稱為決策樹(非常類似于程序設(shè)計中的流程圖)
如下圖:

如何構(gòu)造決策樹
???????? 構(gòu)造決策樹的過程如下
???????? 1:選取數(shù)據(jù)集中的某個特征,根據(jù)該特征將數(shù)據(jù)集劃分為兩部分(例如:我們的數(shù)據(jù)集中有特征A,A的取值位a1和a2,那么我們可以根據(jù)特征A將數(shù)據(jù)集合劃分為A取值為a1的子集1和A取值為a2的子集2),然后我們計算劃分為子集后數(shù)據(jù)的信息增益是多少。
???????? 2:對每個特征都做步驟1的這種處理。最后檢查看根據(jù)那個特征劃分子集后,數(shù)據(jù)集的信息增益最大。
???????? 3:根據(jù)信息增益最大的特征構(gòu)造決策樹的第一層節(jié)點。
???????? 4:然后在子集上繼續(xù)利用該原則,根據(jù)數(shù)據(jù)特征進(jìn)行決策樹第二層的構(gòu)造。
???????? 5:如此遞歸,直到待判斷的數(shù)據(jù)集屬于同一個類別為止,這樣一顆完整的決策樹結(jié)構(gòu)就構(gòu)造成功。
???????? 這個決策樹后續(xù)就可以用在對新數(shù)據(jù)類別的預(yù)測上。
決策樹python例子:
使用下面的海洋生物數(shù)據(jù)說明決策樹的生成

以上數(shù)據(jù),在代碼中我們用1表示是,用0表示否。用一個多維列表進(jìn)行存儲,代碼描述該數(shù)據(jù)結(jié)構(gòu)如下:

數(shù)據(jù)集的熵計算代碼如下:

在構(gòu)造決策樹的過程中,需要根據(jù)數(shù)據(jù)的特征將數(shù)據(jù)集劃分為多個子集

在構(gòu)造決策樹的過程中,選擇一個特征時,需要確保信息丟失最小,如下函數(shù)實現(xiàn)數(shù)據(jù)集合上特征的選擇:

最后我們完成決策數(shù)據(jù)的創(chuàng)建
我們定義一個數(shù)據(jù)結(jié)構(gòu)保存決策樹的節(jié)點。在python中我們用字典作為決策樹結(jié)點。
其中字典的key為決策判斷所得到的特征,value是一個列表,為該特征不同取值下指向下一個節(jié)點。
類似于如下結(jié)構(gòu):
{bestfeature:[{1:{bestfeature:[]}},{2:{bestfeature[]}}, {3:{bestfeature:[]}}]
構(gòu)造決策樹代碼如下(通過遞歸方式實現(xiàn))

完成決策樹以后,對于新的數(shù)據(jù),則可以通過遍歷決策數(shù)據(jù),對新數(shù)據(jù)進(jìn)行預(yù)測,預(yù)測代碼流程如下

整體代碼的使用可以按照以下方式進(jìn)行使用

機(jī)器學(xué)習(xí)之樸素貝葉斯分類
學(xué)習(xí)貝葉斯分類算法之前,需要先掌握貝葉斯原理。
一些基本概念:
條件概率:在事件A發(fā)生的情況下,發(fā)生時間事件B的概率,一般用P(B|A)標(biāo)記。
例如:
有一個紅色箱子,一個白色箱子,在紅色箱子中有3個黑色石頭,4個灰色石頭,在白色箱子中有4個黑色石頭,有3個白色箱子。那么從紅色箱子中去到黑色石頭的概率是多少。類似于這樣的問題被稱為條件概率。
條件概率可以通過以下方式計算出結(jié)果
P(A|B) = P(A andB) P(B)?? 推導(dǎo)出 P(A and B) = P(A|B) /
P(B)
B事件發(fā)生的情況下,A發(fā)生的概率等價于 A和B同時發(fā)生 * P單獨發(fā)生的概率。
P(B|A) = P(B andA) P(A)?? 推導(dǎo)出 P(B and A) =
P(B|A)/P(A)
根據(jù)以上兩個推導(dǎo),又因為P(A and
B) = P(B and A)可以得到
P(B|A)/P(A) =
P(A|B) / P(B)
P(B|A) =P(A|B) *
P(A)/P(B)
把公式P(B|A) =P(A|B) *
P(A)/P(B)我們稱之為貝葉斯定理。換一種方式描述如下:
P(類別|特征) = P(特征|類別)*P(類別)/P(特征)
利用貝葉斯定理,在機(jī)器學(xué)習(xí)中是如何進(jìn)行分類了。
我們已經(jīng)有一份數(shù)據(jù)集合,那么從該數(shù)據(jù)集合中,可以計算得到P(特征|類別),P(類別),P(特征)概率,然后通過該三者概率,可以計算新的數(shù)據(jù)屬于某個類別的概率,從而進(jìn)行分類。
該邏輯過程如下:
假定我們訓(xùn)練的數(shù)據(jù)集樣本如下:

這時候有一個新的數(shù)據(jù)樣本,內(nèi)容如下:

那個根據(jù)新樣本的各個特征取值,我們?nèi)绾闻袛嗉藁虿患?,將這個問題轉(zhuǎn)換稱貝葉斯定理,其過程如下:
1:計算不同分類下的概率
P(嫁|不帥,性格不好,矮,不上進(jìn))
= P(不帥,性格不好,矮,不上進(jìn)|嫁) * P(嫁) / P(不帥,性格不好,矮,不上進(jìn))
P(不嫁|不帥,性格不好,矮,不上進(jìn))
= P(不帥,性格不好,矮,不上進(jìn)|不嫁) * P(不嫁) / P(不帥,性格不好,矮,不上進(jìn))
在上面過程中:等式右邊的內(nèi)容都可以根據(jù)已有數(shù)據(jù)集合的內(nèi)容計算得到。將等式展開如下:
P(嫁|不帥,性格不好,矮,不上進(jìn))
= [P(不帥|嫁) * P(性格不好|嫁) * P(矮|嫁) * P(不上進(jìn)|嫁) * P(嫁)]/[P(不帥) * P(性格不好) * P(矮) * P(不上進(jìn))]
P(不嫁|不帥,性格不好,矮,不上進(jìn))
= [P(不帥|不嫁) * P(性格不好|不嫁) * P(矮|不嫁) * P(不上進(jìn)|不嫁) * P(不嫁)]/[P(不帥) * P(性格不好) * P(矮) * P(不上進(jìn))]
2:選擇概率大的作為計算結(jié)果
代碼如下:
1:生成訓(xùn)練樣例數(shù)據(jù):

2:根據(jù)分類類型,計算在樣例數(shù)據(jù)中的概率

3:根據(jù)分類類型,特征取值為某一個特定只時的概率

4:根據(jù)特征取值計算該特征取值下的概率

5:根據(jù)新的數(shù)據(jù)計算該數(shù)據(jù)在不同分類下的概率并作出判斷

6:得到預(yù)測結(jié)果:

機(jī)器學(xué)習(xí)之SVM
在進(jìn)行數(shù)據(jù)的二元分類時,其實質(zhì)是尋找一條直線或曲線對數(shù)據(jù)進(jìn)行分割,事實上,符合條件的線可能會非常多,那么什么樣的線段能最好的對數(shù)據(jù)進(jìn)行分割,SVM算法就是找一組能夠進(jìn)行分割數(shù)據(jù)的直線中最有效的哪條直線(在這里,對數(shù)據(jù)的分割,我們用直線描述,事實上,如果數(shù)據(jù)超過3個維度,我們要尋找到的應(yīng)該是一個超平面,也就是說是在找一個平面對數(shù)據(jù)進(jìn)行分割,但其原理是相同的,所以后續(xù)我們一直使用直線代替)
SVM(支持向量機(jī))算法就是找到一條直線,使的對需要分割的點而言,該直線到這些點的距離最大。
對于分離數(shù)據(jù)的直線,在數(shù)學(xué)上我們可以寫為
wTx + b= 0這樣的形式。對于一個點A,到該直線的距離,可以寫作|wTA + b|/||w||,下面舉例說明:
對于直線 y=ax+b,我們假定a取值為1,b取值為1,那么該直線形式如下:

對該直線,做個變換,將x軸看作x1,y軸看作x2,格式上可以寫成如下樣子:
x2 = a*x1+b,繼續(xù)變換,可以寫成a*x1+(-1)*x2+b = 0,繼續(xù)變換寫成向量形式:

將該矩陣寫成更一般的形式,即令wTx+b= 0,其中
W是一個2行1列的向量,其形式如下:

W的轉(zhuǎn)置是一個1行2列的向量[a, -1]
在該過程中,a的取值是1,所以wT這個向量的取值是[1,-1],此時如果我們在構(gòu)造另外一個向量φ=[1,a]=[1,1],我們會發(fā)現(xiàn)這wT與φ在坐標(biāo)軸上互相垂直,其中φ與直線wTx+b = 0平行,圖示如下:

從以上圖示可以看出,矩陣w控制了分割直線的方向,參數(shù)b控制了分割直線的截距(當(dāng)橫軸x取值為0時,分割直線y軸的取值)
對于二維平面,矩陣W是一個二維向量,對于多維,該參數(shù)是一個多維向量,可以類推。
對于已有數(shù)據(jù),分布在該分割直線兩側(cè)的點,該如何求出該點到分割直線的距離了,在這里直接給出計算公式,對于一個點A,其到分割直線的距離如下:

例如:對于點A取值為[1,1],該點到直線的距離為([1,-1]T* [1, 1] + 1)/||[1, -1]|| = 1/[if !msEquation][if !vml]
[endif][endif]
其中||w||稱為向量的模,描述的是原點到該向量的距離。以上是基礎(chǔ)概念。
下面說明SVM算法的求解過程:
對于已經(jīng)存在的數(shù)據(jù)集合和存在的分割直線,那么在數(shù)據(jù)集合中肯定存在一些點,這些點到分割直線的距離總是小于其他點到分割直線的距離,也就是說不管分割直線如何變化,總有一些點到分割直線的距離小于集合中其他點到分割直線的距離。
對于SVM算法而言,這是求解的第一步,即找到數(shù)據(jù)集合中的一些點,這些點到分割直線的距離小于其他點到分割直線的距離。
當(dāng)找到了以上這些點以后,在進(jìn)行后續(xù)過程的求解,即找到一條分割直線,這些點到該分割直線的距離大于這些點到其他分割直線的距離。
完成以上兩個過程以后,則SVM求解過程完成。
我們知道,在這個過程中。數(shù)據(jù)集是已知量,所要求解的分割線形式是已知量,但對應(yīng)參數(shù)我們w和b是未知的,需要根據(jù)數(shù)據(jù)集合求解出參數(shù)w和b。
下面進(jìn)行參數(shù)w和b的求解,求解之前會有一些約束條件:
1:并不是所有的分割平面都可以將樣本數(shù)據(jù)進(jìn)行分割。
2:公式中的點并不是隨隨便便的一個樣本點,而是支持向量對應(yīng)的樣本點
3:決策面的位置應(yīng)該位于間隔區(qū)域的中軸線上。
首先考慮一個決策面可以將所有樣本點進(jìn)行正確分類的約束。我們?yōu)槊總€樣本點Xi加上也給類別標(biāo)簽Yi。

如果分割面能進(jìn)行正確分類,那么則有如下表現(xiàn):

如果要求更高一點,假設(shè)分割平面位于中軸線上,并且響應(yīng)向量對應(yīng)的樣本點到分割面的距離為d,則有




Softmax實現(xiàn)mnist數(shù)據(jù)集合識別



CNN實現(xiàn)mnist數(shù)據(jù)集合識別
1:創(chuàng)建函數(shù),從mnist原始文件中讀取數(shù)據(jù),對于28*28的圖片數(shù)據(jù)需要進(jìn)行歸一化操作,將數(shù)據(jù)全部分配到0到1的范圍以內(nèi),具體讀取代碼如下:

注意標(biāo)紅的位置,該行代碼對數(shù)據(jù)進(jìn)行歸一化處理,如果不做歸一化處理,后面訓(xùn)練結(jié)果將不正確,會導(dǎo)致訓(xùn)練參數(shù)中出現(xiàn)NA錯誤。
2:定義預(yù)測函數(shù)
預(yù)測函數(shù)的目的是根據(jù)現(xiàn)有的數(shù)據(jù),計算出一個匹配結(jié)果,該函數(shù)的實現(xiàn)也是訓(xùn)練模型實現(xiàn)的關(guān)鍵部分。該函數(shù)內(nèi)部可以劃分為兩部分
1)所使用到的變量參數(shù)。
2)數(shù)據(jù)之間的關(guān)系(模型關(guān)系)

注意預(yù)測函數(shù)中變量的定義,由于預(yù)測函數(shù)在主流程中會被調(diào)用多次,這樣在其中定義的變量會被tensorflow框架定義多次,從而導(dǎo)致訓(xùn)練時所使用的變量與預(yù)測時所使用的變量并不是同一個變量,從而導(dǎo)致預(yù)測結(jié)果異常,因此在預(yù)測函數(shù)中變量的定義可以參考如下方式完成:

如上代碼表示,在變量作用域cnn范圍內(nèi),如果找到變量則使用該變量,如果沒有找到,則創(chuàng)建該變量,從而確保預(yù)測函數(shù)中訓(xùn)練所使用的變量與預(yù)測所使用的變量是同一個變量。
3:定義損失函數(shù)
損失函數(shù)用于將預(yù)測結(jié)果與真實數(shù)據(jù)進(jìn)行比較以便其差值達(dá)到最小。

4:定義訓(xùn)練函數(shù)
???????? 在tensorflow中使用對應(yīng)的優(yōu)化器進(jìn)行訓(xùn)練

5:定義訓(xùn)練主流程以及測試主流程

搬遷2020年之前csdn總結(jié)。