国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用

這篇具有很好參考價(jià)值的文章主要介紹了深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

手寫(xiě)數(shù)字識(shí)別

說(shuō)到數(shù)字識(shí)別問(wèn)題,這是一個(gè)分類問(wèn)題,也就是我們要探討的邏輯回歸問(wèn)題。邏輯回歸是機(jī)器學(xué)習(xí)算法中非常經(jīng)典的一種算法。

1、線性回歸VS邏輯回歸

線性回歸和邏輯回歸的關(guān)系就是:邏輯回歸是廣義的線性回歸。它們就是一個(gè)東西,只是范圍不同。我在文章《深度學(xué)習(xí)在單線性回歸方程中的應(yīng)用–TensorFlow實(shí)戰(zhàn)詳解》講到的預(yù)測(cè)問(wèn)題實(shí)則是線性回歸,本質(zhì)就是用一堆數(shù)據(jù)集點(diǎn)去模擬出一個(gè)函數(shù),再用這個(gè)函數(shù)進(jìn)行預(yù)測(cè)。邏輯回歸是在這個(gè)基礎(chǔ)上,將得到的函數(shù)放在一個(gè) Sigmoid()函數(shù)里求出來(lái)得到一堆概率值,這些概率值就是在0和1之間的。這個(gè)時(shí)候我們?cè)谠O(shè)置一個(gè)閾值,通過(guò)比較概率和這個(gè)閾值的關(guān)系,我們就能達(dá)到分類的效果了。

總結(jié)一下就是:

線性回歸解決的是回歸問(wèn)題,邏輯回歸相當(dāng)于是線性回歸的基礎(chǔ)上,來(lái)解決分類問(wèn)題。

線性回歸:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

邏輯回歸:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

從上面兩個(gè)公式:邏輯回歸可以理解為在線性回歸后加了一個(gè)Sigmoid 函數(shù)。將線性回歸變成一個(gè)0~1輸出的分類問(wèn)題。

Sigmoid函數(shù)

這個(gè)函數(shù)長(zhǎng)成這個(gè)樣子:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

線性回歸得到大于0的輸出,邏輯回歸就會(huì)得到0.5 ~ 1的輸出;線性回歸得到小于0的輸出,邏輯回歸就會(huì)得到0 ~ 0.5的輸出;【其實(shí)就是上面把Z>0和Z<0兩種情況討論】

他們的聯(lián)系:線性回歸模型試圖找到一個(gè)線性方程來(lái)擬合數(shù)據(jù),而邏輯回歸模型則試圖找到一個(gè)邏輯函數(shù)來(lái)擬合數(shù)據(jù)。線性回歸解決預(yù)測(cè)問(wèn)題,邏輯回歸解決分類問(wèn)題。

2、邏輯回歸的基本模型-神經(jīng)網(wǎng)絡(luò)模型

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

許多問(wèn)題的預(yù)測(cè)結(jié)果是一個(gè)在連續(xù)空間的數(shù)值,比如房?jī)r(jià)預(yù)測(cè)問(wèn)題,可以用線性模型來(lái)描 述:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

但也有很多場(chǎng)景需要輸出的是概率估算值,例如:

  • 根據(jù)郵件內(nèi)容判斷是垃圾郵件的可能性

  • 根據(jù)醫(yī)學(xué)影像判斷腫瘤是惡性的可能性

  • 手寫(xiě)數(shù)字分別是 0、1、2、3、4、5、6、7、8、9的可能性(概率)

    這時(shí)需要將預(yù)測(cè)輸出值控制在 [0,1]區(qū)間內(nèi) 二元分類問(wèn)題的目標(biāo)是正確預(yù)測(cè)兩個(gè)可能的標(biāo)簽中的一個(gè) 。

    邏輯回歸(Logistic Regression)可以用于處理這類問(wèn)題

3、多元分類基本模型

為什么要討論多元分類呢?因?yàn)槲覀兩厦嬉肓?strong>邏輯回歸的基本模型,我們把邏輯回歸基本模型拼成如下圖所示就可以得到一個(gè)多元分類模型了:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

其實(shí)這個(gè)模型就是一個(gè)全連接神經(jīng)網(wǎng)絡(luò)

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

這個(gè)Softmax的作用就是讓邏輯回歸得到的概率值在0-1之間,且概率值相加之和為1!這個(gè)Softmax長(zhǎng)成這樣:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

4、TensorFlow實(shí)戰(zhàn)解決手寫(xiě)數(shù)字識(shí)別問(wèn)題

我們說(shuō)機(jī)器學(xué)習(xí)呢算法的套路如下:

  • 準(zhǔn)備數(shù)據(jù)集
  • 構(gòu)建模型
  • 訓(xùn)練模型
  • 進(jìn)行預(yù)測(cè)

準(zhǔn)備數(shù)據(jù)集

我們現(xiàn)在去哪里搜集數(shù)據(jù)集呢?

MNIST 數(shù)據(jù)集可在 http://yann.lecun.com/exdb/mnist/ 獲取。

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
print("TensorFlow2.0版本是:",tf.__version__)
#打印當(dāng)前的數(shù)據(jù)集
mnist=tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()
print("Train images_shape:",train_images.shape,"Train label shape:",train_labels.shape)
print("Test images shape:",test_images.shape,"Test label shape:",test_labels.shape)
數(shù)據(jù)集劃分

為了高考取得好成績(jī),你需要 模擬卷 ,押題卷真題卷。

其中:

  • 模擬卷=訓(xùn)練集
  • 押題卷=驗(yàn)證集
  • 真題卷=測(cè)試集

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

這樣分類,才能更好的對(duì)你的大腦進(jìn)行訓(xùn)練,如果不按章法刷題,你上來(lái)就做真題卷,押題卷缺少了系統(tǒng)的訓(xùn)練;如果你不做押題卷,只做模擬卷,那么你缺少了對(duì)真題命題規(guī)律的判斷。這在機(jī)器學(xué)習(xí)中叫做過(guò)擬合或者欠擬合,意思是你的大腦泛化能力不夠好,模型訓(xùn)練的不大好。

我們建立了如下圖的新的工作流程:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

total_num=len(train_images)
valid_split=0.2 # 驗(yàn)證集的比例占20%
train_num=int(total_num*(1-valid_split))#訓(xùn)練集的數(shù)目

train_x=train_images[:train_num]#前部分給訓(xùn)練集
train_y=train_labels[:train_num]

valid_x=train_images[train_num:]#后20%給驗(yàn)證集
valid_y=train_labels[train_num:]

test_x=test_images
test_y=test_labels

valid_x.shape

特征數(shù)據(jù)歸一化

特征數(shù)據(jù)歸一化(特征歸一化)是指將數(shù)據(jù)按比例縮放,使之落入一個(gè)小的特定區(qū)間。在某些比較和評(píng)價(jià)的指標(biāo)處理中經(jīng)常會(huì)用到,去除數(shù)據(jù)的單位限制,將其轉(zhuǎn)化為無(wú)量綱的純數(shù)值,便于不同單位或量級(jí)的指標(biāo)能夠進(jìn)行比較和加權(quán)。特征歸一化通常將數(shù)據(jù)映射到[0,1]區(qū)間上,常見(jiàn)的映射范圍有[0,1]和[-1,1]。這樣可以使得不同指標(biāo)之間具有可比性。同時(shí),特征歸一化也可以消除數(shù)據(jù)特征之間的量綱影響。

例如,分析一個(gè)人的身高和體重對(duì)健康的影響 , 如果使用米( m) 和千克( kg )作為單位 , 那么身高特征會(huì)在 1.6 ~ l.8m 的數(shù)值范圍內(nèi) , 體重特征會(huì)在50 ~ 100kg 的范圍內(nèi), 分析出來(lái)的結(jié)果顯然會(huì)傾向于數(shù)值差別比較大的體重特征。 想要得到更為準(zhǔn)確的結(jié)果,就需要進(jìn)行特征歸一化( Normalization )處理,使各指標(biāo)處于同一數(shù)值量級(jí),以便進(jìn)行分析。

歸一化方法
  • 線性函數(shù)歸 化( Min-Max Scaling )

它對(duì)原始數(shù)據(jù)進(jìn)行線性變換,使結(jié)果映射到[0, 1 ]的范圍,實(shí)現(xiàn)對(duì)原始數(shù)據(jù)的等比縮放。歸一化公式如下:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

  • 零均值歸一化( Z-Score Normalization )

它會(huì)將原始數(shù)據(jù)映射到均值為 0、標(biāo)準(zhǔn)差為1 的分布上。 具體來(lái)說(shuō), 假設(shè)原始特征的均值為 μ、標(biāo)準(zhǔn)差為 σ,那么歸一化公式定義為

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

歸一化場(chǎng)景

當(dāng)然 ,數(shù)據(jù)歸一化并不是萬(wàn)能的。 在實(shí)際應(yīng)用中,通過(guò)梯度下降法求解的模型通常是需要?dú)w一化的 ,包括邏輯回歸、線性回歸、邏輯回歸、支持向量機(jī)、 神經(jīng)網(wǎng)絡(luò)等模型。 但對(duì)于決策樹(shù)模型則并不適用 , 以C4.5 為例,決策樹(shù)在進(jìn)行節(jié)點(diǎn)分裂時(shí)主要依據(jù)數(shù)據(jù)集 D 關(guān)于特征 x 的信息增益比,而信息增益比跟特征是否經(jīng)過(guò)歸一化是無(wú)關(guān)的,因?yàn)闅w一化并不會(huì)改變樣本在特征 x 上的信息增益。

# 把(28,28)的結(jié)構(gòu)拉成一行 784
train_x=train_x.reshape(-1,784)
valid_x=valid_x.reshape(-1,784)
test_x=test_x.reshape(-1,784)
# 特征數(shù)據(jù)歸一化
train_x=tf.cast(train_x/255.0,tf.float32)
valid_x=tf.cast(valid_x/255.0,tf.float32)
test_x=tf.cast(test_x/255.0,tf.float32)

train_x[1]

標(biāo)簽數(shù)據(jù)獨(dú)熱編碼

在機(jī)器學(xué)習(xí)算法中,我們經(jīng)常會(huì)遇到分類特征,例如:人的性別有男女,祖國(guó)有中國(guó),美國(guó),法國(guó)等。這些特征值并不是連續(xù)的,而是離散的,無(wú)序的。通常我們需要對(duì)其進(jìn)行特征數(shù)字化。

考慮以下三個(gè)特征:

[“male”, “female”]

[“from Europe”, “from US”, “from Asia”]

[“uses Firefox”, “uses Chrome”, “uses Safari”, “uses Internet Explorer”]

如果將上述特征用數(shù)字表示,效率會(huì)高很多。例如:

[“male”, “from US”, “uses Internet Explorer”] 表示為[0, 1, 3]

[“female”, “from Asia”, “uses Chrome”]表示為[1, 2, 1]

但是,轉(zhuǎn)化為數(shù)字表示后,上述數(shù)據(jù)不能直接用在我們的分類器中。因?yàn)?,分類器往往默認(rèn)數(shù)據(jù)數(shù)據(jù)是連續(xù)的,并且是有序的。但按上述表示的數(shù)字并不有序的,而是隨機(jī)分配的。


  • One-Hot編碼

One-Hot編碼,又稱為一位有效編碼,主要是采用N位狀態(tài)寄存器來(lái)對(duì)N個(gè)狀態(tài)進(jìn)行編碼,每個(gè)狀態(tài)都由他獨(dú)立的寄存器位,并且在任意時(shí)候只有一位有效。

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

就拿上面的例子來(lái)說(shuō)吧,性別特征:[“男”,“女”],按照N位狀態(tài)寄存器來(lái)對(duì)N個(gè)狀態(tài)進(jìn)行編碼的原理,咱們處理后應(yīng)該是這樣的(這里只有兩個(gè)特征,所以N=2):

男 => 10

女 => 01

祖國(guó)特征:[“中國(guó)”,"美國(guó),“法國(guó)”](這里N=3):

中國(guó) => 100

美國(guó) => 010

法國(guó) => 001

運(yùn)動(dòng)特征:[“足球”,“籃球”,“羽毛球”,“乒乓球”](這里N=4):

足球 => 1000

籃球 => 0100

羽毛球 => 0010

乒乓球 => 0001

所以,當(dāng)一個(gè)樣本為[“男”,“中國(guó)”,“乒乓球”]的時(shí)候,完整的特征數(shù)字化的結(jié)果為:

[1,0,1,0,0,0,0,0,1]

在回歸,分類,聚類等機(jī)器學(xué)習(xí)算法中,特征之間距離的計(jì)算或相似度的計(jì)算是非常重要的,而我們常用的距離或相似度的計(jì)算都是在歐式空間的相似度計(jì)算,計(jì)算余弦相似性,基于的就是歐式空間。而我們使用one-hot編碼,將離散特征的取值擴(kuò)展到了歐式空間,離散特征的某個(gè)取值就對(duì)應(yīng)歐式空間的某個(gè)點(diǎn)。將離散型特征使用one-hot編碼,確實(shí)會(huì)讓特征之間的距離計(jì)算更加合理。

# 對(duì)標(biāo)簽數(shù)據(jù)進(jìn)行獨(dú)熱編碼
train_y=tf.one_hot(train_y,depth=10)
valid_y=tf.one_hot(valid_y,depth=10)
test_y=tf.one_hot(test_y,depth=10)
train_y

構(gòu)建模型

#構(gòu)建模型
def model(x,w,b):
    pred=tf.matmul(x,w)+b
    return tf.nn.softmax(pred)

#定義變量
W=tf.Variable(tf.random.normal([784,10],mean=0.0,stddev=1.0,dtype=tf.float32))
B=tf.Variable(tf.zeros([10]),dtype=tf.float32)

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

損失函數(shù)

我們?cè)诰€性回歸的實(shí)戰(zhàn)中采用的損失函數(shù)是 平方損失函數(shù)。

在邏輯回歸中,我們采用的損失函數(shù)是 對(duì)數(shù)損失函數(shù)深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

這個(gè)函數(shù)是一個(gè)凸函數(shù),它的圖象如下:

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

在多元分類問(wèn)題中,我們通常采用交叉熵?fù)p失函數(shù)

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

def loss(x,y,w,b):
    pred=model(x,w,b)#計(jì)算模型預(yù)測(cè)值和標(biāo)簽值的差異
    loss_=tf.keras.losses.categorical_crossentropy(y_true=y,y_pred=pred)# 官方的交叉熵?fù)p失函數(shù)
    return tf.reduce_mean(loss_)#求均值,得到均方差

訓(xùn)練超參數(shù)

training_epochs=20#訓(xùn)練輪數(shù)
batch_size=50#單次訓(xùn)練樣本
learning_rate=0.001 #學(xué)習(xí)率

梯度函數(shù)

#計(jì)算樣本數(shù)據(jù)在[x,y]在參數(shù)[w,b]點(diǎn)上的梯度
def grad(x,y,w,b):
    with tf.GradientTape() as tape:
        loss_=loss(x,y,w,b)
    return tape.gradient(loss_,[w,b])#返回梯度向量

Adam優(yōu)化器

#Adam優(yōu)化器
optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate)

常用的優(yōu)化器有:

  • SGD
  • Adagrad
  • RMSprop
  • Adam

準(zhǔn)確率

#定義準(zhǔn)確率
def accuary(x,y,w,b):
    pred=model(x,w,b)#計(jì)算模型預(yù)測(cè)和標(biāo)簽值的差異
    # 檢查預(yù)測(cè)類別tf.argmax(pred,1)與實(shí)際類別tf.argmax(pred,1)的匹配情況
    correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
    #準(zhǔn)確率
    return tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

模型訓(xùn)練

total_step=int(train_num/batch_size)#一輪訓(xùn)練有多少批次

loss_list_train=[]#用于保存訓(xùn)練集loss值的列表
loss_list_valid=[]# 用于保存驗(yàn)證集loss值的列表
acc_list_train=[]# 用于保存訓(xùn)練集Acc的值的列表
acc_list_valid=[]# 用于保存驗(yàn)證集Acc值的列表

for epoch in range(training_epochs):
    for step in range(total_step):
        xs=train_x[step*batch_size:(step+1)*batch_size]
        ys=train_y[step*batch_size:(step+1)*batch_size]
        
        grads=grad(xs,ys,W,B)#計(jì)算梯度
        optimizer.apply_gradients(zip(grads,[W,B]))#優(yōu)化器根據(jù)梯度自動(dòng)調(diào)整變量w和b
        
    loss_train=loss(train_x,train_y,W,B).numpy() #計(jì)算當(dāng)前輪訓(xùn)練損失
    loss_valid=loss(valid_x,valid_y,W,B).numpy() #計(jì)算當(dāng)前輪損失驗(yàn)證
    acc_train=accuary(train_x,train_y,W,B).numpy()
    acc_valid=accuary(valid_x,valid_y,W,B).numpy()
    loss_list_train.append(loss_train)
    loss_list_valid.append(loss_valid)
    acc_list_train.append(acc_train)
    acc_list_valid.append(acc_valid)
    
    print("epoch={:3d},train_loss={:.4f},train_acc={:.4f},val_loss={:.4f},val_acc={:.4f}".format(
    epoch+1,loss_train,acc_train,loss_valid,acc_valid))

顯示訓(xùn)練過(guò)程數(shù)據(jù)

plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.plot(loss_list_train,'blue',label='Train Loss')
plt.plot(loss_list_valid,'red',label='Valid Loss')
plt.legend(loc=1)#通過(guò)參數(shù)loc指定圖例位置

plt.xlabel("Epochs")
plt.ylabel("Accuary")
plt.plot(acc_list_train,'blue',label='Train Acc')
plt.plot(acc_list_valid,'red',label='Valid Acc')
plt.legend(loc=1)#通過(guò)參數(shù)loc指定圖例位置

在測(cè)試集完成評(píng)估模型

acc_test=accuary(test_x,test_y,W,B).numpy()
print("Test accuary:",acc_test)

模型預(yù)測(cè)

模型建立完成以后并訓(xùn)練完,現(xiàn)在認(rèn)為準(zhǔn)確度可以接受了,接下來(lái)可以使用這個(gè)模型進(jìn)行預(yù)測(cè)了。

# 定義預(yù)測(cè)函數(shù)
def predict(x,w,b):
    pred=model(x,w,b)#計(jì)算預(yù)測(cè)值
    result=tf.argmax(pred,1).numpy()
    return result
pred_test=predict(test_x,W,B)
pred_test[0]

定義可視化函數(shù)

def plot_images_labels_prediction(images,# 圖象列表
                                 labels,# 標(biāo)簽列表
                                 preds,#預(yù)測(cè)值列表
                                 index=0,#從第index個(gè)開(kāi)始顯示
                                 num=10):#缺省一次顯示10幅
    fig=plt.gcf() #獲取當(dāng)前圖表
    fig.set_size_inches(10,4) # 1英寸=2.54cm
    if num > 10:
        num = 10 #最多顯示10個(gè)子圖
    for i in range(0,num):
        ax=plt.subplot(2,5,i+1)#獲取當(dāng)前要處理的子圖
        ax.imshow(np.reshape(images[index],(28,28)),cmap='binary')# 顯示第index個(gè)圖
        
        title="label="+str(labels[index])#構(gòu)建圖上要顯示的title信息
        if len(preds)>0:
            title+=",predict="+str(preds[index])
        
        ax.set_title(title,fontsize=10)#顯示圖上的title信息
        ax.set_xticks([])#不顯示坐標(biāo)
        ax.set_yticks([])
        index=index+1
    plt.show()

預(yù)測(cè)函數(shù)可視化預(yù)測(cè)結(jié)果

#可視化預(yù)測(cè)結(jié)果
plot_images_labels_prediction(test_images,test_labels,pred_test,10,10)

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow

可以調(diào)整訓(xùn)練迭代次數(shù)來(lái)提高迭代的準(zhǔn)確度。

5、完整代碼demo

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
print("TensorFlow2.0版本是:",tf.__version__)

mnist=tf.keras.datasets.mnist
(train_images,train_labels),(test_images,test_labels)=mnist.load_data()

print("Train images_shape:",train_images.shape,"Train label shape:",train_labels.shape)
print("Test images shape:",test_images.shape,"Test label shape:",test_labels.shape)

print("image data:",train_images[1])

def plot_image(image):
    plt.imshow(image.reshape(28,28),cmap='binary')
    plt.show()
plot_image(train_images[1])

total_num=len(train_images)
valid_split=0.2 # 驗(yàn)證集的比例占20%
train_num=int(total_num*(1-valid_split))#訓(xùn)練集的數(shù)目

train_x=train_images[:train_num]#前部分給訓(xùn)練集
train_y=train_labels[:train_num]

valid_x=train_images[train_num:]#后20%給驗(yàn)證集
valid_y=train_labels[train_num:]

test_x=test_images
test_y=test_labels

valid_x.shape

# 把(28,28)的結(jié)構(gòu)拉成一行 784
train_x=train_x.reshape(-1,784)
valid_x=valid_x.reshape(-1,784)
test_x=test_x.reshape(-1,784)
# 特征數(shù)據(jù)歸一化
train_x=tf.cast(train_x/255.0,tf.float32)
valid_x=tf.cast(valid_x/255.0,tf.float32)
test_x=tf.cast(test_x/255.0,tf.float32)

train_x[1]

# 對(duì)標(biāo)簽數(shù)據(jù)進(jìn)行獨(dú)熱編碼
train_y=tf.one_hot(train_y,depth=10)
valid_y=tf.one_hot(valid_y,depth=10)
test_y=tf.one_hot(test_y,depth=10)
train_y

#構(gòu)建模型
def model(x,w,b):
    pred=tf.matmul(x,w)+b
    return tf.nn.softmax(pred)

#定義變量
W=tf.Variable(tf.random.normal([784,10],mean=0.0,stddev=1.0,dtype=tf.float32))
B=tf.Variable(tf.zeros([10]),dtype=tf.float32)

def loss(x,y,w,b):
    pred=model(x,w,b)#計(jì)算模型預(yù)測(cè)值和標(biāo)簽值的差異
    loss_=tf.keras.losses.categorical_crossentropy(y_true=y,y_pred=pred)
    return tf.reduce_mean(loss_)#求均值,得到均方差

training_epochs=20#訓(xùn)練輪數(shù)
batch_size=50#單次訓(xùn)練樣本
learning_rate=0.001 #學(xué)習(xí)率

#計(jì)算樣本數(shù)據(jù)在[x,y]在參數(shù)[w,b]點(diǎn)上的梯度
def grad(x,y,w,b):
    with tf.GradientTape() as tape:
        loss_=loss(x,y,w,b)
    return tape.gradient(loss_,[w,b])#返回梯度向量

#Adam優(yōu)化器
optimizer=tf.keras.optimizers.Adam(learning_rate=learning_rate)

#定義準(zhǔn)確率
def accuary(x,y,w,b):
    pred=model(x,w,b)#計(jì)算模型預(yù)測(cè)和標(biāo)簽值的差異
    # 檢查預(yù)測(cè)類別tf.argmax(pred,1)與實(shí)際類別tf.argmax(pred,1)的匹配情況
    correct_prediction=tf.equal(tf.argmax(pred,1),tf.argmax(y,1))
    #準(zhǔn)確率
    return tf.reduce_mean(tf.cast(correct_prediction,tf.float32))

total_step=int(train_num/batch_size)#一輪訓(xùn)練有多少批次

loss_list_train=[]#用于保存訓(xùn)練集loss值的列表
loss_list_valid=[]# 用于保存驗(yàn)證集loss值的列表
acc_list_train=[]# 用于保存訓(xùn)練集Acc的值的列表
acc_list_valid=[]# 用于保存驗(yàn)證集Acc值的列表

for epoch in range(training_epochs):
    for step in range(total_step):
        xs=train_x[step*batch_size:(step+1)*batch_size]
        ys=train_y[step*batch_size:(step+1)*batch_size]
        
        grads=grad(xs,ys,W,B)#計(jì)算梯度
        optimizer.apply_gradients(zip(grads,[W,B]))#優(yōu)化器根據(jù)梯度自動(dòng)調(diào)整變量w和b
        
    loss_train=loss(train_x,train_y,W,B).numpy() #計(jì)算當(dāng)前輪訓(xùn)練損失
    loss_valid=loss(valid_x,valid_y,W,B).numpy() #計(jì)算當(dāng)前輪損失驗(yàn)證
    acc_train=accuary(train_x,train_y,W,B).numpy()
    acc_valid=accuary(valid_x,valid_y,W,B).numpy()
    loss_list_train.append(loss_train)
    loss_list_valid.append(loss_valid)
    acc_list_train.append(acc_train)
    acc_list_valid.append(acc_valid)
    
    print("epoch={:3d},train_loss={:.4f},train_acc={:.4f},val_loss={:.4f},val_acc={:.4f}".format(
    epoch+1,loss_train,acc_train,loss_valid,acc_valid))
    
    
plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.plot(loss_list_train,'blue',label='Train Loss')
plt.plot(loss_list_valid,'red',label='Valid Loss')
plt.legend(loc=1)#通過(guò)參數(shù)loc指定圖例位置

plt.xlabel("Epochs")
plt.ylabel("Accuary")
plt.plot(acc_list_train,'blue',label='Train Acc')
plt.plot(acc_list_valid,'red',label='Valid Acc')
plt.legend(loc=1)#通過(guò)參數(shù)loc指定圖例位置

acc_test=accuary(test_x,test_y,W,B).numpy()
print("Test accuary:",acc_test)

# 定義預(yù)測(cè)函數(shù)
def predict(x,w,b):
    pred=model(x,w,b)#計(jì)算預(yù)測(cè)值
    result=tf.argmax(pred,1).numpy()
    return result
pred_test=predict(test_x,W,B)
pred_test[0]

def plot_images_labels_prediction(images,# 圖象列表
                                 labels,# 標(biāo)簽列表
                                 preds,#預(yù)測(cè)值列表
                                 index=0,#從第index個(gè)開(kāi)始顯示
                                 num=10):#缺省一次顯示10幅
    fig=plt.gcf() #獲取當(dāng)前圖表
    fig.set_size_inches(10,4) # 1英寸=2.54cm
    if num > 10:
        num = 10 #最多顯示10個(gè)子圖
    for i in range(0,num):
        ax=plt.subplot(2,5,i+1)#獲取當(dāng)前要處理的子圖
        ax.imshow(np.reshape(images[index],(28,28)),cmap='binary')# 顯示第index個(gè)圖
        
        title="label="+str(labels[index])#構(gòu)建圖上要顯示的title信息
        if len(preds)>0:
            title+=",predict="+str(preds[index])
        
        ax.set_title(title,fontsize=10)#顯示圖上的title信息
        ax.set_xticks([])#不顯示坐標(biāo)
        ax.set_yticks([])
        index=index+1
    plt.show()
    
#可視化預(yù)測(cè)結(jié)果
plot_images_labels_prediction(test_images,test_labels,pred_test,10,10)

深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用,人工智能,深度學(xué)習(xí),邏輯回歸,tensorflow文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759779.html

到了這里,關(guān)于深度學(xué)習(xí)與邏輯回歸模型的融合--TensorFlow多元分類的高級(jí)應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)分析之Logistic回歸分析(二元邏輯回歸、多元有序邏輯回歸、多元無(wú)序邏輯回歸)

    數(shù)據(jù)分析之Logistic回歸分析(二元邏輯回歸、多元有序邏輯回歸、多元無(wú)序邏輯回歸)

    在研究X對(duì)于Y的影響時(shí): 如果Y為定量數(shù)據(jù),那么使用多元線性回歸分析; 如果Y為定類數(shù)據(jù),那么使用Logistic回歸分析。 結(jié)合實(shí)際情況,可以將Logistic回歸分析分為3類: 二元Logistic回歸分析 多元有序Logistic回歸分析 多元無(wú)序Logistic回歸分析 Logistic回歸分析用于研究X對(duì)Y的影響

    2024年03月13日
    瀏覽(30)
  • 機(jī)器學(xué)習(xí)10—多元線性回歸模型

    機(jī)器學(xué)習(xí)10—多元線性回歸模型

    在市場(chǎng)的經(jīng)濟(jì)活動(dòng)中,經(jīng)常會(huì)遇到某一市場(chǎng)現(xiàn)象的發(fā)展和變化取決于幾個(gè)影響因素的情況,也就是一個(gè)因變量和幾個(gè)自變量有依存關(guān)系的情況。而且有時(shí)幾個(gè)影響因素主次難以區(qū)分,或者有的因素雖屬次要,但也不能略去其作用。例如,某一商品的銷售量既與人口的增長(zhǎng)變化

    2023年04月24日
    瀏覽(22)
  • 深度學(xué)習(xí) -- 邏輯回歸 PyTorch實(shí)現(xiàn)邏輯回歸

    線性回歸解決的是回歸問(wèn)題,而邏輯回歸解決的是分類問(wèn)題,這兩種問(wèn)題的區(qū)別是前者的目標(biāo)屬性是連續(xù)的數(shù)值類型,而后者的目標(biāo)屬性是離散的標(biāo)稱類型。 可以將邏輯回歸視為神經(jīng)網(wǎng)絡(luò)的一個(gè)神經(jīng)元,因此學(xué)習(xí)邏輯回歸能幫助理解神經(jīng)網(wǎng)絡(luò)的工作原理。 邏輯回歸是一種 廣

    2024年02月06日
    瀏覽(19)
  • 學(xué)習(xí)記錄2-多元線性回歸模型(附上python代碼)

    學(xué)習(xí)記錄2-多元線性回歸模型(附上python代碼)

    研究貨運(yùn)總量 y (萬(wàn)噸)與工業(yè)總產(chǎn)值 x1(億元)、農(nóng)業(yè)總產(chǎn)值 x2(億元),居民非商品支出 X3?(億元)的關(guān)系。數(shù)據(jù)見(jiàn)表3-9。 (1)計(jì)算出 y , x1?,x2, x3?的相關(guān)系數(shù)矩陣。 (2)求 y 關(guān)于 x1?,x2, x3?的三元線性回歸方程。 (3)對(duì)所求得的方程做擬合優(yōu)度檢驗(yàn)。 (4)對(duì)回歸方程做

    2024年02月03日
    瀏覽(20)
  • 【機(jī)器學(xué)習(xí)300問(wèn)】11、多元線性回歸模型和一元線性回歸有什么不同?

    【機(jī)器學(xué)習(xí)300問(wèn)】11、多元線性回歸模型和一元線性回歸有什么不同?

    ? ? ? ? 在之前的文章中,我們已經(jīng)學(xué)習(xí)了一元線性回歸模型,其中最關(guān)鍵的參數(shù)是w和b。機(jī)器學(xué)習(xí)的目的就是去得到合適w和b后能準(zhǔn)確預(yù)測(cè)未知數(shù)據(jù)。但現(xiàn)實(shí)世界是復(fù)雜的,一個(gè)事情的發(fā)生絕大多數(shù)時(shí)候不會(huì)是一個(gè)原因?qū)е隆?????????因此多元線性回歸模型區(qū)別與一元線

    2024年01月22日
    瀏覽(23)
  • 多元回歸預(yù)測(cè) | Matlab基于粒子群算法優(yōu)化深度置信網(wǎng)絡(luò)(PSO-DBN)的數(shù)據(jù)回歸預(yù)測(cè),matlab代碼回歸預(yù)測(cè),多變量輸入模型

    多元回歸預(yù)測(cè) | Matlab基于粒子群算法優(yōu)化深度置信網(wǎng)絡(luò)(PSO-DBN)的數(shù)據(jù)回歸預(yù)測(cè),matlab代碼回歸預(yù)測(cè),多變量輸入模型

    效果一覽 文章概述 多元回歸預(yù)測(cè) | Matlab基于基于粒子群算法優(yōu)化深度置信網(wǎng)絡(luò)(PSO-DBN)的數(shù)據(jù)回歸預(yù)

    2024年02月12日
    瀏覽(45)
  • 深度學(xué)習(xí)(一),線性回歸與邏輯回歸

    深度學(xué)習(xí)(一),線性回歸與邏輯回歸

    ? ? ? ? 代碼是自己敲得,圖是自己畫(huà)的,連公式都是一個(gè)一個(gè)字打的, 希望贊是你給的(≧?≦)。 ????????線性回歸(Liner Regression),俗稱lr。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 一個(gè)大家熟悉得不能再熟悉的式子,便是線性回歸

    2024年03月25日
    瀏覽(15)
  • 【深度學(xué)習(xí)】實(shí)驗(yàn)06 使用TensorFlow完成線性回歸

    【深度學(xué)習(xí)】實(shí)驗(yàn)06 使用TensorFlow完成線性回歸

    TensorFlow是由Google開(kāi)發(fā)的一個(gè)開(kāi)源的機(jī)器學(xué)習(xí)框架。它可以讓開(kāi)發(fā)者更加輕松地構(gòu)建和訓(xùn)練深度學(xué)習(xí)模型,從而解決各種自然語(yǔ)言處理、計(jì)算機(jī)視覺(jué)、語(yǔ)音識(shí)別、推薦系統(tǒng)等領(lǐng)域的問(wèn)題。 TensorFlow的主要特點(diǎn)是靈活性和可伸縮性。它實(shí)現(xiàn)了一種基于數(shù)據(jù)流圖的計(jì)算模型,使得用

    2024年02月10日
    瀏覽(22)
  • 深度學(xué)習(xí)之用PyTorch實(shí)現(xiàn)邏輯回歸

    深度學(xué)習(xí)之用PyTorch實(shí)現(xiàn)邏輯回歸

    0.1 學(xué)習(xí)視頻源于:b站:劉二大人《PyTorch深度學(xué)習(xí)實(shí)踐》 0.2 本章內(nèi)容為自主學(xué)習(xí)總結(jié)內(nèi)容,若有錯(cuò)誤歡迎指正! 代碼(類比線性回歸): BCEloss: ? 結(jié)果: 注:輸出結(jié)果為類別是1的概率。

    2024年02月13日
    瀏覽(31)
  • 數(shù)據(jù)分析之Logistic回歸分析中的【多元有序邏輯回歸】

    多元有序邏輯回歸用于分析有序分類因變量與一個(gè)或多個(gè)自變量之間的關(guān)系。有序邏輯回歸適用于因變量具有自然排序但沒(méi)有固定間距的類別,例如疾病嚴(yán)重程度(輕度、中度、重度)或調(diào)查問(wèn)卷中的滿意度評(píng)分(非常不滿意、不滿意、一般、滿意、非常滿意)。 多元有序邏

    2024年04月24日
    瀏覽(47)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包