[Python人工智能] 二.TensorFlow基礎(chǔ)及一元直線預(yù)測(cè)案例 丨【百變AI秀】

      網(wǎng)友投稿 970 2025-04-01

      基礎(chǔ)性文章,希望對(duì)您有所幫助,如果文章中存在錯(cuò)誤或不足之處,還請(qǐng)海涵~同時(shí)自己也是人工智能的菜鳥,希望大家能與我在這一筆一劃的博客中成長(zhǎng)起來(lái)。

      文章目錄:

      一.神經(jīng)網(wǎng)絡(luò)前言

      二.TensorFlow結(jié)構(gòu)及工作原理

      三.TensorFlow實(shí)現(xiàn)一元直線預(yù)測(cè)

      四.總結(jié)

      前文賞析:

      [Python人工智能] 一.TensorFlow2.0環(huán)境搭建及神經(jīng)網(wǎng)絡(luò)入門

      [Python人工智能] 二.TensorFlow基礎(chǔ)及一元直線預(yù)測(cè)案例 丨【百變AI秀】

      代碼-(歡迎大家關(guān)注):

      https://github.com/eastmountyxz/AI-for-TensorFlow

      https://github.com/eastmountyxz/AI-for-Keras

      一.神經(jīng)網(wǎng)絡(luò)前言

      如下圖所示,通過該神經(jīng)網(wǎng)絡(luò)識(shí)別動(dòng)物貓或狗,共包括輸入層(Input Layer)、隱藏層3層(Hidden Layer)和輸出層(Output Layer)。其中每一個(gè)神經(jīng)元都有一個(gè)激勵(lì)函數(shù),被激勵(lì)的神經(jīng)元傳遞的信息最有價(jià)值,它也決定最后的輸出結(jié)果,經(jīng)過海量數(shù)據(jù)的訓(xùn)練,最終神經(jīng)網(wǎng)絡(luò)將可以用于識(shí)別貓或狗。

      激勵(lì)函數(shù)相當(dāng)于一個(gè)過濾器或激勵(lì)器,它把特有的信息或特征激活,常見的激活函數(shù)包括softplus、sigmoid、relu、softmax、elu、tanh等。對(duì)于隱藏層,我們可以使用relu、tanh、softplus等非線性關(guān)系;對(duì)于分類問題,我們可以使用sigmoid(值越小越接近于0,值越大越接近于1)、softmax函數(shù),對(duì)每個(gè)類求概率,最后以最大的概率作為結(jié)果;對(duì)于回歸問題,可以使用線性函數(shù)(linear function)來(lái)實(shí)驗(yàn)。

      神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元中都有激勵(lì)函數(shù)(activation function),常見的激勵(lì)函數(shù)參考維基百科:

      https://en.wikipedia.org/wiki/Activation_function

      現(xiàn)假設(shè)輸入x代表一串?dāng)?shù)字,輸出y代表一個(gè)二次函數(shù),藍(lán)色的點(diǎn)表示數(shù)據(jù)集,紅線表示神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的一條曲線,并代表我們的數(shù)據(jù)。最初這條曲線可能是彎彎曲曲的,隨著不斷地訓(xùn)練和學(xué)習(xí),這條曲線會(huì)逐漸擬合到我的數(shù)據(jù)上來(lái),該紅線越符合數(shù)據(jù)的趨勢(shì),就表示神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)到的東西越多,亦越能去預(yù)測(cè)其趨勢(shì)。

      二.TensorFlow結(jié)構(gòu)及工作原理

      Tensorflow是一個(gè)使用數(shù)據(jù)流圖(data flow graphs)技術(shù)來(lái)進(jìn)行數(shù)值計(jì)算的開源軟件庫(kù)。數(shù)據(jù)流圖是是一個(gè)有向圖,使用節(jié)點(diǎn)(一般用圓形或方形描述,表示一個(gè)數(shù)學(xué)操作或數(shù)據(jù)輸入的起點(diǎn)和數(shù)據(jù)輸出的終點(diǎn))和線(表示數(shù)字、矩陣或Tensor張量)來(lái)描述數(shù)學(xué)計(jì)算。數(shù)據(jù)流圖可以方便的將各個(gè)節(jié)點(diǎn)分配到不同的計(jì)算設(shè)備上完成異步并行計(jì)算,非常適合大規(guī)模的機(jī)器學(xué)習(xí)應(yīng)用[7]。如下圖所示,通過Gradients不斷學(xué)習(xí)改進(jìn)我們的權(quán)重W和偏置b,從而提升準(zhǔn)確度。

      TensorFlow支持各種異構(gòu)的平臺(tái),支持多CPU/GPU、服務(wù)器、移動(dòng)設(shè)備,具有良好的跨平臺(tái)的特性;TensorFlow架構(gòu)靈活,能夠支持各種網(wǎng)絡(luò)模型,具有良好的通用性。此外,TensorFlow內(nèi)核采用C/C++開發(fā),并提供了C++、Python、Java、Go語(yǔ)言的Client API。其架構(gòu)靈活,能夠支持各種網(wǎng)絡(luò)模型,具有良好的通用性和可擴(kuò)展性。tensorflow.js支持在web端使用webGL運(yùn)行GPU訓(xùn)練深度學(xué)習(xí)模型,支持在IOS、Android系統(tǒng)中加載運(yùn)行機(jī)器學(xué)習(xí)模型。其基本結(jié)構(gòu)如下圖所示:

      TensorFlow怎么處理數(shù)據(jù)呢?接下來(lái)分享莫煩老師解析TensorFlow的工作原理。

      下圖是一個(gè)包含輸入層(input layer)、隱藏層(hidden layer)和輸出層(output layer)的典型神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)。

      點(diǎn)開輸入層input,發(fā)現(xiàn)它包含 x-input 和 y-input;然后隱藏層包含了權(quán)重(weights)和偏置(biases),以及一個(gè)激勵(lì)函數(shù)relu,后面會(huì)深入分享。

      TensorFlow的第一步是做什么呢?它就是需要建立這樣一個(gè)結(jié)構(gòu),然后把數(shù)據(jù)放到這個(gè)結(jié)構(gòu)中,讓TensorFlow自己運(yùn)行,通過不斷地訓(xùn)練和學(xué)習(xí),修改參數(shù)來(lái)輸出準(zhǔn)確的預(yù)測(cè)結(jié)果。TensorFlow中文翻譯是“向量在這個(gè)結(jié)構(gòu)中飛”,這也是TensorFlow的基本含義。

      最后補(bǔ)充一個(gè)在線的神經(jīng)網(wǎng)絡(luò)模擬器,大家可以試著去運(yùn)行,看看神經(jīng)網(wǎng)絡(luò)的工作原理及參數(shù)調(diào)整。地址為:

      http://playground.tensorflow.org/

      三.TensorFlow實(shí)現(xiàn)一元直線預(yù)測(cè)

      接著補(bǔ)充一個(gè)TensorFlow預(yù)測(cè)線性直線(y = 0.1 * x + 0.3)的案例。

      1.首先定義隨機(jī)生成的100個(gè)數(shù)字和線性直線

      TensorFlow中比較常見的格式是float32,這里也進(jìn)行相關(guān)的設(shè)置。同時(shí),預(yù)測(cè)的權(quán)重weight為0.1,偏置biases為0.3

      x_data = np.random.rand(100).astype(np.float32)

      print(x_data)

      y_data = x_data * 0.1 + 0.3

      print(y_data)

      輸出結(jié)果為:

      [0.42128456 0.3590797 0.31952253 0.54071575 0.4098252 0.87536865 0.58871204 0.37161928 0.30826327 0.94290715 0.40412208 0.47935355 ... 0.00465394 0.0929272 0.18561055 0.8577836 0.6737635 0.04606532 0.8738483 0.9900948 0.13116711 0.299359 ] [0.34212846 0.335908 0.33195227 0.3540716 0.34098253 0.38753688 0.35887122 0.33716193 0.33082634 0.39429075 0.34041223 0.34793538 ... 0.3004654 0.30929273 0.31856108 0.38577837 0.36737636 0.30460656 0.38738483 0.3990095 0.31311673 0.3299359 ]

      2.創(chuàng)建TensorFlow結(jié)構(gòu),定義權(quán)重Weights和偏置biases

      權(quán)重為tf.Variable參數(shù)變量,隨機(jī)生成的一維結(jié)構(gòu)數(shù)列,其范圍是-1.0到1.0;偏置biases初始值為0。TensorFlow學(xué)習(xí)的目的是從初始值不斷提升到目標(biāo)0.1(Weights)0和0.3(biases)。

      Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0))

      print(Weights)

      biases = tf.Variable(tf.zeros([1]))

      print(biases)

      輸出結(jié)果為:

      3.定義預(yù)測(cè)值y和損失函數(shù)

      損失函數(shù)為預(yù)測(cè)的y和實(shí)際值y_data的最小方差。

      y = Weights * x_data + biases

      loss = tf.reduce_mean(tf.square(y-y_data))

      4. 構(gòu)建神經(jīng)網(wǎng)絡(luò)優(yōu)化器(梯度下降優(yōu)化函數(shù))

      這里的優(yōu)化器為GradientDescentOptimizer,通過優(yōu)化器減少誤差,每一步訓(xùn)練減少誤差并提升參數(shù)準(zhǔn)確度。學(xué)習(xí)效率設(shè)置為0.5,一般是一個(gè)小于1的數(shù)字。

      optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5)

      train = optimizer.minimize(loss)

      注意,TensorFlow2.0和TensorFlow1.0的一些方法都有改動(dòng)。舉個(gè)例子,在預(yù)測(cè)加利福尼亞的房?jī)r(jià)案例中,tf.train.GradientDescentOptimizer這個(gè)類已經(jīng)不能使用,是train這個(gè)模塊被2.0整體移除,對(duì)比如下。

      TensorFlow1.0:optimizer = tf.train.GradientDescentOptimizer(0.5)

      TensorFlow2.0:optimizer = tf.optimizers.SGD(learning_rate=0.5)

      TF2.0官方:https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/optimizers

      In TensorFlow 2.0, Keras became the default high-level API, and optimizer functions migrated from tf.keras.optimizers into separate API called tf.optimizers. They inherit from Keras class Optimizer. Relevant functions from tf.train aren’t included into TF 2.0. So to access GradientDescentOptimizer, call tf.optimizers.SGD

      5.初始化變量

      init = tf.global_variables_initializer()

      6.定義Session并訓(xùn)練,每隔20次輸出結(jié)果

      # 定義Session sess = tf.Session() # 運(yùn)行時(shí)Session就像一個(gè)指針 指向要處理的位置并激活 sess.run(init)t # 訓(xùn)練201次 for n in range(201): # 訓(xùn)練并且每隔20次輸出結(jié)果 sess.run(train) if n % 20 == 0: # 最佳擬合結(jié)果 W: [0.100], b: [0.300] print(n, sess.run(Weights), sess.run(biases))

      輸出結(jié)果如下圖所示,每隔20次訓(xùn)練,就輸出一次它的參數(shù)——weight權(quán)重和biases偏置。我們想要做的是預(yù)測(cè)線性直線,最初的時(shí)候,計(jì)算值和與測(cè)試值會(huì)有很大的差別,神經(jīng)網(wǎng)絡(luò)需要做的就是不斷縮小預(yù)測(cè)值y和實(shí)際值y_data的差別。最后經(jīng)過200次訓(xùn)練后,已經(jīng)非常接近這些散點(diǎn)了。

      0 [-0.17100081] [0.60644317] 20 [0.00904198] [0.34798568] 40 [0.07555631] [0.31289548] 60 [0.09343112] [0.3034655] 80 [0.09823472] [0.3009313] 100 [0.09952562] [0.3002503] 120 [0.09987252] [0.30006728] 140 [0.09996576] [0.30001807] 160 [0.09999081] [0.30000487] 180 [0.09999753] [0.30000132] 200 [0.09999932] [0.30000037]

      7.可視化顯示

      pre = x_data * sess.run(Weights) + sess.run(biases)

      plt.scatter(x_data, y_data)

      plt.plot(x_data, pre, ‘r-’)

      plt.show()

      完整代碼如下所示(精簡(jiǎn)版):

      # -*- coding: utf-8 -*- """ Created on 2019-11-30 下午6點(diǎn) 寫于武漢大學(xué) @author: Eastmount CSDN YXZ """ import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import time x_data = np.random.rand(100).astype(np.float32) y_data = x_data * 0.1 + 0.3 #權(quán)重0.1 偏置0.3 #------------------開始創(chuàng)建tensorflow結(jié)構(gòu)------------------ # 權(quán)重和偏置 Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) biases = tf.Variable(tf.zeros([1])) # 預(yù)測(cè)值y y = Weights * x_data + biases # 損失函數(shù) loss = tf.reduce_mean(tf.square(y-y_data)) # 建立神經(jīng)網(wǎng)絡(luò)優(yōu)化器 optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5) #學(xué)習(xí)效率 train = optimizer.minimize(loss) # 初始化變量 init = tf.global_variables_initializer() #------------------結(jié)束創(chuàng)建tensorflow結(jié)構(gòu)------------------ # 定義Session sess = tf.Session() # 運(yùn)行時(shí)Session就像一個(gè)指針 指向要處理的位置并激活 sess.run(init) # 訓(xùn)練并且每隔20次輸出結(jié)果 for n in range(201): sess.run(train) if n % 20 == 0: print(n, sess.run(Weights), sess.run(biases)) pre = x_data * sess.run(Weights) + sess.run(biases) # 可視化分析 plt.scatter(x_data, y_data) plt.plot(x_data, pre, 'r-') plt.show()

      輸出結(jié)果如下圖所示,權(quán)重從最初的隨機(jī)數(shù)0.3913201,逐漸優(yōu)化成目標(biāo)0.1;偏置從最初的隨機(jī)數(shù)0.19479582,逐步優(yōu)化到0.3,通過不斷地學(xué)習(xí)和訓(xùn)練。

      [Python人工智能] 二.TensorFlow基礎(chǔ)及一元直線預(yù)測(cè)案例 丨【百變AI秀】

      8.可視化對(duì)比多張效果圖的完整代碼

      # -*- coding: utf-8 -*- """ Created on Sun Dec 1 20:00:14 2019 @author: xiuzhang """ # -*- coding: utf-8 -*- """ Created on 2019-11-30 下午6點(diǎn) 寫于武漢大學(xué) @author: Eastmount CSDN YXZ """ import tensorflow as tf import numpy as np import matplotlib.pyplot as plt x_data = np.random.rand(100).astype(np.float32) y_data = x_data * 0.1 + 0.3 #權(quán)重0.1 偏置0.3 #------------------開始創(chuàng)建tensorflow結(jié)構(gòu)------------------ # 權(quán)重和偏置 Weights = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) biases = tf.Variable(tf.zeros([1])) # 預(yù)測(cè)值y y = Weights * x_data + biases # 損失函數(shù) loss = tf.reduce_mean(tf.square(y-y_data)) # 建立神經(jīng)網(wǎng)絡(luò)優(yōu)化器 optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.5) #學(xué)習(xí)效率 train = optimizer.minimize(loss) # 初始化變量 init = tf.global_variables_initializer() #------------------結(jié)束創(chuàng)建tensorflow結(jié)構(gòu)------------------ # 可視化 plt.plot(x_data, y_data,'ro', marker='^', c='blue',label='original_data') plt.legend() plt.show() # 定義Session sess = tf.Session() # 運(yùn)行時(shí)Session就像一個(gè)指針 指向要處理的位置并激活 sess.run(init) # 訓(xùn)練并且每隔20次輸出結(jié)果 k = 0 for n in range(200): sess.run(train) if n % 20 == 0: print(n, sess.run(Weights), sess.run(biases)) pre = x_data * sess.run(Weights) + sess.run(biases) # 可視化分析 k = k + 1 plt.subplot(5, 2, k) plt.plot(x_data, y_data, 'ro') plt.plot(x_data, pre, label=k) plt.legend() plt.show()

      輸出結(jié)果如下圖所示:

      四.總結(jié)

      寫到這里,這篇基礎(chǔ)性的TensorFlow文章就講述完畢。它通過不斷地訓(xùn)練和學(xué)習(xí),將預(yù)測(cè)結(jié)果與實(shí)際曲線y=0.1*x+0.3向匹配,這是非?;A(chǔ)的一篇深度學(xué)習(xí)文章,同時(shí)文章中存在錯(cuò)誤或不足之處,還請(qǐng)海涵~同時(shí),作為人工智能的菜鳥,我希望自己能不斷進(jìn)步并深入,后續(xù)將它應(yīng)用于圖像識(shí)別、網(wǎng)絡(luò)安全、對(duì)抗樣本等領(lǐng)域,一起加油!女神晚上收到了又一封家書,道不盡的思戀,讀博不易,寫文也不易,且行且珍惜。

      感恩能與大家在華為云遇見!

      希望能與大家一起在華為云社區(qū)共同成長(zhǎng)。

      【百變AI秀】有獎(jiǎng)?wù)魑幕馃徇M(jìn)行中:https://bbs.huaweicloud.com/blogs/296704

      (By:娜璋之家 Eastmount 2021-09-04 夜于武漢)

      參考文獻(xiàn):

      AI Python TensorFlow

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:身份證怎么打?。ㄉ矸葑C照片怎么打印成復(fù)印件)
      下一篇:模板格式?。0宓母袷皆趺淳庉嫞?/a>
      相關(guān)文章
      亚洲欧美成人一区二区三区| 亚洲欧美日韩一区二区三区 | 亚洲最新视频在线观看| 亚洲午夜国产精品无码老牛影视| 亚洲精品老司机在线观看| 亚洲AV无码乱码精品国产| 亚洲av最新在线观看网址| 亚洲成av人片天堂网无码】| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲狠狠婷婷综合久久蜜芽| 亚洲国产成人综合精品| 在线观看国产一区亚洲bd| 无码天堂亚洲国产AV| 内射无码专区久久亚洲| 亚洲精品国产福利一二区| 精品国产人成亚洲区| 亚洲综合无码AV一区二区| 国产亚洲人成网站在线观看不卡| 亚洲av永久无码精品国产精品| 亚洲AV日韩AV永久无码绿巨人 | 蜜臀亚洲AV无码精品国产午夜.| 成人亚洲国产精品久久| 国产a v无码专区亚洲av| 亚洲日韩精品无码专区网址| 亚洲国产精品无码专区影院 | 亚洲国产精品一区二区第四页| 久久久久噜噜噜亚洲熟女综合 | 亚洲丰满熟女一区二区哦| 亚洲Av无码乱码在线znlu| 亚洲综合区小说区激情区| 国产精品亚洲片在线观看不卡| 久久久亚洲欧洲日产国码农村| 久久精品国产亚洲av麻豆色欲| 亚洲中字慕日产2021| 亚洲色大成网站WWW国产| 日韩亚洲精品福利| 亚洲综合国产一区二区三区| 亚洲精品高清视频| 国产成人精品日本亚洲11| 亚洲欧美在线x视频| 中文字幕精品亚洲无线码一区应用|