国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

瀏覽:79日期:2022-06-20 08:18:15

Hello,兄弟們,開(kāi)始搞深度學(xué)習(xí)了,今天出第一篇博客,小白一枚,如果發(fā)現(xiàn)錯(cuò)誤請(qǐng)及時(shí)指正,萬(wàn)分感謝。

使用軟件

Python 3.8,Tensorflow2.0

問(wèn)題描述

鳶尾花主要分為狗尾草鳶尾(0)、雜色鳶尾(1)、弗吉尼亞鳶尾(2)。人們發(fā)現(xiàn)通過(guò)計(jì)算鳶尾花的花萼長(zhǎng)、花萼寬、花瓣長(zhǎng)、花瓣寬可以將鳶尾花分類(lèi)。所以只要給出足夠多的鳶尾花花萼、花瓣數(shù)據(jù),以及對(duì)應(yīng)種類(lèi),使用合適的神經(jīng)網(wǎng)絡(luò)訓(xùn)練,就可以實(shí)現(xiàn)鳶尾花分類(lèi)。

搭建神經(jīng)網(wǎng)絡(luò)

輸入數(shù)據(jù)是花萼長(zhǎng)、花萼寬、花瓣長(zhǎng)、花瓣寬,是n行四列的矩陣。而輸出的是每個(gè)種類(lèi)的概率,是n行三列的矩陣。我們采用BP神經(jīng)網(wǎng)絡(luò),設(shè)X為輸入數(shù)據(jù),Y為輸出數(shù)據(jù),W為權(quán)重,B偏置。有

y=x∗w+b

因?yàn)閤為n行四列的矩陣,y為n行三列的矩陣,所以w必須為四行三列的矩陣,每個(gè)神經(jīng)元對(duì)應(yīng)一個(gè)b,所以b為一行三列的的矩陣。神經(jīng)網(wǎng)絡(luò)如下圖。

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

所以,只要找到合適的w和b,就能準(zhǔn)確判斷鳶尾花的種類(lèi)。下面就開(kāi)始對(duì)這兩個(gè)參數(shù)進(jìn)行訓(xùn)練。

訓(xùn)練參數(shù)損失函數(shù)

損失函數(shù)表達(dá)的是預(yù)測(cè)值(y*)和真實(shí)值(y)的差距,我們采用均方誤差公式作為損失函數(shù)。

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

損失函數(shù)值越小,說(shuō)明預(yù)測(cè)值和真實(shí)值越接近,w和b就越合適。如果人來(lái)一組一組試,那肯定是不行的。所以我們采用梯度下降算法來(lái)找到損失函數(shù)最小值。梯度:對(duì)函數(shù)求偏導(dǎo)的向量。梯度下降的方向就是函數(shù)減少的方向。

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

其中a為學(xué)習(xí)率,即梯度下降的步長(zhǎng),如果a太大,就可能錯(cuò)過(guò)最優(yōu)值,如果a太小,則就需要更多步才能找到最優(yōu)值。所以選擇合適的學(xué)習(xí)率很關(guān)鍵。

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

參數(shù)優(yōu)化

通過(guò)反向傳播來(lái)優(yōu)化參數(shù)。反向傳播:從后向前,逐層求損失函數(shù)對(duì)每層神經(jīng)元參數(shù)的偏導(dǎo)數(shù),迭代更新所有參數(shù)。比如

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

可以看到w會(huì)逐漸趨向于loss的最小值0。以上就是我們訓(xùn)練的全部關(guān)鍵點(diǎn)。

代碼數(shù)據(jù)集

我們使用sklearn包提供的鳶尾花數(shù)據(jù)集。共150組數(shù)據(jù)。打亂保證數(shù)據(jù)的隨機(jī)性,取前120個(gè)為訓(xùn)練集,后30個(gè)為測(cè)試集。

# 導(dǎo)入數(shù)據(jù),分別為輸入特征和標(biāo)簽x_data = datasets.load_iris().data ## 存花萼、花瓣特征數(shù)據(jù)y_data = datasets.load_iris().target # 存對(duì)應(yīng)種類(lèi)# 隨機(jī)打亂數(shù)據(jù)(因?yàn)樵紨?shù)據(jù)是順序的,順序不打亂會(huì)影響準(zhǔn)確率)# seed: 隨機(jī)數(shù)種子,是一個(gè)整數(shù),當(dāng)設(shè)置之后,每次生成的隨機(jī)數(shù)都一樣(為方便教學(xué),以保每位同學(xué)結(jié)果一致)np.random.seed(116) # 使用相同的seed,保證輸入特征和標(biāo)簽一一對(duì)應(yīng)np.random.shuffle(x_data)np.random.seed(116)np.random.shuffle(y_data)tf.random.set_seed(116)# 將打亂后的數(shù)據(jù)集分割為訓(xùn)練集和測(cè)試集,訓(xùn)練集為前120行,測(cè)試集為后30行x_train = x_data[:-30]y_train = y_data[:-30]x_test = x_data[-30:]y_test = y_data[-30:]# 轉(zhuǎn)換x的數(shù)據(jù)類(lèi)型,否則后面矩陣相乘時(shí)會(huì)因數(shù)據(jù)類(lèi)型不一致報(bào)錯(cuò)x_train = tf.cast(x_train, tf.float32)x_test = tf.cast(x_test, tf.float32)# from_tensor_slices函數(shù)使輸入特征和標(biāo)簽值一一對(duì)應(yīng)。(把數(shù)據(jù)集分批次,每個(gè)批次batch組數(shù)據(jù))train_db = tf.data.Dataset.from_tensor_slices((x_train, y_train)).batch(32)test_db = tf.data.Dataset.from_tensor_slices((x_test, y_test)).batch(32)參數(shù)

# 生成神經(jīng)網(wǎng)絡(luò)的參數(shù),4個(gè)輸入特征故,輸入層為4個(gè)輸入節(jié)點(diǎn);因?yàn)?分類(lèi),故輸出層為3個(gè)神經(jīng)元# 用tf.Variable()標(biāo)記參數(shù)可訓(xùn)練w1 = tf.Variable(tf.random.truncated_normal([4, 3], stddev=0.1)) # 四行三列,方差為0.1b1 = tf.Variable(tf.random.truncated_normal([3], stddev=0.1)) # 一行三列,方差為0.1訓(xùn)練

a = 0.1 # 學(xué)習(xí)率為0.1epoch = 500 # 循環(huán)500輪# 訓(xùn)練部分for epoch in range(epoch): # 數(shù)據(jù)集級(jí)別的循環(huán),每個(gè)epoch循環(huán)一次數(shù)據(jù)集 for step, (x_train, y_train) in enumerate(train_db): # batch級(jí)別的循環(huán) ,每個(gè)step循環(huán)一個(gè)batchwith tf.GradientTape() as tape: # with結(jié)構(gòu)記錄梯度信息 y = tf.matmul(x_train, w1) + b1 # 神經(jīng)網(wǎng)絡(luò)乘加運(yùn)算 y = tf.nn.softmax(y) # 使輸出y符合概率分布 y_ = tf.one_hot(y_train, depth=3) # 將標(biāo)簽值轉(zhuǎn)換為獨(dú)熱碼格式,方便計(jì)算loss loss = tf.reduce_mean(tf.square(y_ - y)) # 采用均方誤差損失函數(shù)mse = mean(sum(y-y*)^2)# 計(jì)算loss對(duì)w, b的梯度grads = tape.gradient(loss, [w1, b1])# 實(shí)現(xiàn)梯度更新 w1 = w1 - lr * w1_grad b = b - lr * b_gradw1.assign_sub(a * grads[0]) # 參數(shù)w1自更新b1.assign_sub(a * grads[1]) # 參數(shù)b自更新測(cè)試

# 測(cè)試部分total_correct, total_number = 0, 0for x_test, y_test in test_db: # 前向傳播求概率 y = tf.matmul(x_test, w1) + b1 y = tf.nn.softmax(y) predict = tf.argmax(y, axis=1) # 返回y中最大值的索引,即預(yù)測(cè)的分類(lèi) # 將predict轉(zhuǎn)換為y_test的數(shù)據(jù)類(lèi)型 predict = tf.cast(predict, dtype=y_test.dtype) # 若分類(lèi)正確,則correct=1,否則為0,將bool型的結(jié)果轉(zhuǎn)換為int型 correct = tf.cast(tf.equal(predict, y_test), dtype=tf.int32) # 將每個(gè)batch的correct數(shù)加起來(lái) correct = tf.reduce_sum(correct) # 將所有batch中的correct數(shù)加起來(lái) total_correct += int(correct) # total_number為測(cè)試的總樣本數(shù),也就是x_test的行數(shù),shape[0]返回變量的行數(shù) total_number += x_test.shape[0]# 總的準(zhǔn)確率等于total_correct/total_numberacc = total_correct / total_numberprint('測(cè)試準(zhǔn)確率 = %.2f %%' % (acc * 100.0))my_test = np.array([[5.9, 3.0, 5.1, 1.8]])print('輸入 5.9 3.0 5.1 1.8')my_test = tf.convert_to_tensor(my_test)my_test = tf.cast(my_test, tf.float32)y = tf.matmul(my_test, w1) + b1y = tf.nn.softmax(y)species = {0: '狗尾鳶尾', 1: '雜色鳶尾', 2: '弗吉尼亞鳶尾'}predict = np.array(tf.argmax(y, axis=1))[0] # 返回y中最大值的索引,即預(yù)測(cè)的分類(lèi)print('該鳶尾花為:' + species.get(predict))

結(jié)果:

python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)

結(jié)語(yǔ)

以上就是全部?jī)?nèi)容,鳶尾花分類(lèi)作為經(jīng)典案例,應(yīng)該重點(diǎn)掌握理解。有一起學(xué)習(xí)的伙伴可以把想法打在評(píng)論區(qū),大家多多交流,我也會(huì)及時(shí)回復(fù)的!

以上就是python 使用Tensorflow訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)的詳細(xì)內(nèi)容,更多關(guān)于python 訓(xùn)練BP神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)鳶尾花分類(lèi)的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美手机视频 | 91成人免费 | 国产a国产片 | 99视频国产热精品视频 | 国产人成久久久精品 | 国产综合久久久久 | 在线a人片免费观看国产 | 国产在线精品一区二区三区不卡 | 精品日韩欧美一区二区三区在线播放 | 欧美亚洲综合另类在线观看 | 中国a级黄色片 | 1级a的观看视频 | 亚洲精品在线视频 | 万全影院亚洲影院理论片 | 国产舐足视频在线观看 | 亚洲成av人影片在线观看 | 久久久久久久亚洲精品一区 | 亚洲成a人一区二区三区 | 日韩精品一区二区在线观看 | 三级毛片免费观看 | 国产成人无精品久久久 | 91成人午夜性a一级毛片 | 在线视频精品一区 | 国产99视频精品一区 | 九九视频免费在线观看 | 亚洲美女视频免费 | 日韩一区二区视频在线观看 | 国产成人在线小视频 | 一级做a爰片久久毛片看看 一级做a爰片久久毛片鸭王 | 欧美激情综合亚洲一二区 | 天天看夜夜操 | 国产日产久久高清欧美一区 | 美国一级毛片免费看成人 | 国产欧美另类久久精品91 | 国产精品久久久久久福利漫画 | 久久99视频 | 91精品国产综合久久青草 | 美女白浆视频 | 无码孕妇孕交在线观看 | 国内精品久久久久久影院老狼 | 毛片网站在线播放 |