欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

解析Tensorflow之MNIST的使用

 更新時間:2020年06月30日 10:42:06   作者:ZHLee  
這篇文章主要介紹了解析Tensorflow之MNIST的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

要說2017年什么技術(shù)最火爆,無疑是google領(lǐng)銜的深度學(xué)習(xí)開源框架Tensorflow。本文簡述一下深度學(xué)習(xí)的入門例子MNIST。

深度學(xué)習(xí)簡單介紹

首先要簡單區(qū)別幾個概念:人工智能,機器學(xué)習(xí),深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò)。這幾個詞應(yīng)該是出現(xiàn)的最為頻繁的,但是他們有什么區(qū)別呢?

人工智能:人類通過直覺可以解決的問題,如:自然語言理解,圖像識別,語音識別等,計算機很難解決,而人工智能就是要解決這類問題。

機器學(xué)習(xí):如果一個任務(wù)可以在任務(wù)T上,隨著經(jīng)驗E的增加,效果P也隨之增加,那么就認(rèn)為這個程序可以從經(jīng)驗中學(xué)習(xí)。

深度學(xué)習(xí):其核心就是自動將簡單的特征組合成更加復(fù)雜的特征,并用這些特征解決問題。

神經(jīng)網(wǎng)絡(luò):最初是一個生物學(xué)的概念,一般是指大腦神經(jīng)元,觸點,細(xì)胞等組成的網(wǎng)絡(luò),用于產(chǎn)生意識,幫助生物思考和行動,后來人工智能受神經(jīng)網(wǎng)絡(luò)的啟發(fā),發(fā)展出了人工神經(jīng)網(wǎng)絡(luò)。

來一張圖就比較清楚了,如下圖:

MNIST解析

MNIST是深度學(xué)習(xí)的經(jīng)典入門demo,他是由6萬張訓(xùn)練圖片和1萬張測試圖片構(gòu)成的,每張圖片都是28*28大小(如下圖),而且都是黑白色構(gòu)成(這里的黑色是一個0-1的浮點數(shù),黑色越深表示數(shù)值越靠近1),這些圖片是采集的不同的人手寫從0到9的數(shù)字。TensorFlow將這個數(shù)據(jù)集和相關(guān)操作封裝到了庫中,下面我們來一步步解讀深度學(xué)習(xí)MNIST的過程。

上圖就是4張MNIST圖片。這些圖片并不是傳統(tǒng)意義上.jpg或者jpg格式的圖片,因.jpg或者jpg的圖片格式,會帶有很多干擾信息(如:數(shù)據(jù)塊,圖片頭,圖片尾,長度等等),這些圖片會被處理成很簡易的二維數(shù)組,如圖:

可以看到,矩陣中有值的地方構(gòu)成的圖形,跟左邊的圖形很相似。之所以這樣做,是為了讓模型更簡單清晰。特征更明顯。

我們先看模型的代碼以及如何訓(xùn)練模型:

 mnist = input_data.read_data_sets(FLAGS.data_dir, one_hot=True)
# x是特征值
 x = tf.placeholder(tf.float32, [None, 784])
# w表示每一個特征值(像素點)會影響結(jié)果的權(quán)重
 W = tf.Variable(tf.zeros([784, 10]))
 b = tf.Variable(tf.zeros([10]))
 y = tf.matmul(x, W) + b
# 是圖片實際對應(yīng)的值
 y_ = tf.placeholder(tf.float32, [None, 10])<br>
 cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y_, logits=y))
 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
 sess = tf.InteractiveSession()
 tf.global_variables_initializer().run()
 # mnist.train 訓(xùn)練數(shù)據(jù)
 for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})
 
 #取得y得最大概率對應(yīng)的數(shù)組索引來和y_的數(shù)組索引對比,如果索引相同,則表示預(yù)測正確
 correct_prediction = tf.equal(tf.arg_max(y, 1), tf.arg_max(y_, 1))
 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
 
 print(sess.run(accuracy, feed_dict={x: mnist.test.images,
                    y_: mnist.test.labels}))

首先第一行是獲取MNIST的數(shù)據(jù)集,我們逐一解釋一下:

x(圖片的特征值):這里使用了一個28*28=784列的數(shù)據(jù)來表示一個圖片的構(gòu)成,也就是說,每一個點都是這個圖片的一個特征,這個其實比較好理解,因為每一個點都會對圖片的樣子和表達的含義有影響,只是影響的大小不同而已。至于為什么要將28*28的矩陣攤平成為一個1行784列的一維數(shù)組,我猜測可能是因為這樣做會更加簡單直觀。

W(特征值對應(yīng)的權(quán)重):這個值很重要,因為我們深度學(xué)習(xí)的過程,就是發(fā)現(xiàn)特征,經(jīng)過一系列訓(xùn)練,從而得出每一個特征對結(jié)果影響的權(quán)重,我們訓(xùn)練,就是為了得到這個最佳權(quán)重值。

b(偏置量):是為了去線性話(我不是太清楚為什么需要這個值)

y(預(yù)測的結(jié)果):單個樣本被預(yù)測出來是哪個數(shù)字的概率,比如:有可能結(jié)果是[ 1.07476616 -4.54194021 2.98073649 -7.42985344 3.29253793 1.967506178.59438515 -6.65950203 1.68721473 -0.9658531 ],則分別表示是0,1,2,3,4,5,6,7,8,9的概率,然后會取一個最大值來作為本次預(yù)測的結(jié)果,對于這個數(shù)組來說,結(jié)果是6(8.59438515)

y_(真實結(jié)果):來自MNIST的訓(xùn)練集,每一個圖片所對應(yīng)的真實值,如果是6,則表示為:[0 0 0 0 0 1 0 0 0]

再下面兩行代碼是損失函數(shù)(交叉熵)和梯度下降算法,通過不斷的調(diào)整權(quán)重和偏置量的值,來逐步減小根據(jù)計算的預(yù)測結(jié)果和提供的真實結(jié)果之間的差異,以達到訓(xùn)練模型的目的。

算法確定以后便可以開始訓(xùn)練模型了,如下:

for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

mnist.train.next_batch(100)是從訓(xùn)練集里一次提取100張圖片數(shù)據(jù)來訓(xùn)練,然后循環(huán)1000次,以達到訓(xùn)練的目的。

之后的兩行代碼都有注釋,不再累述。我們看最后一行代碼:

print(sess.run(accuracy, feed_dict={x: mnist.test.images,
                    y_: mnist.test.labels}))

mnist.test.images和mnist.test.labels是測試集,用來測試。accuracy是預(yù)測準(zhǔn)確率。

當(dāng)代碼運行起來以后,我們發(fā)現(xiàn),準(zhǔn)確率大概在92%左右浮動。這個時候我們可能想看看到底是什么樣的圖片讓預(yù)測不準(zhǔn)。則添加如下代碼:

for i in range(0, len(mnist.test.images)):
 result = sess.run(correct_prediction, feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])})
 if not result:
  print('預(yù)測的值是:',sess.run(y, feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])}))
  print('實際的值是:',sess.run(y_,feed_dict={x: np.array([mnist.test.images[i]]), y_: np.array([mnist.test.labels[i]])}))
  one_pic_arr = np.reshape(mnist.test.images[i], (28, 28))
  pic_matrix = np.matrix(one_pic_arr, dtype="float")
  plt.imshow(pic_matrix)
  pylab.show()
  break
 
print(sess.run(accuracy, feed_dict={x: mnist.test.images,
                   y_: mnist.test.labels}))

for循環(huán)內(nèi)指明一旦result為false,就表示出現(xiàn)了預(yù)測值和實際值不符合的圖片,然后我們把值和圖片分別打印出來看看:

預(yù)測的值是: [[ 1.82234347 -4.87242508 2.63052988 -6.56350136 2.73666072 2.30682945 8.59051228 -7.20512581 1.45552373 -0.90134078]]

對應(yīng)的是數(shù)字6。
實際的值是: [[ 0. 0. 0. 0. 0. 1. 0. 0. 0. 0.]]

對應(yīng)的是數(shù)字5。

我們再來看看圖片是什么樣子的:

的確像5又像6。

總體來說,只有92%的準(zhǔn)確率,還是比較低的,后續(xù)會解析一下比較適合識別圖片的卷積神經(jīng)網(wǎng)絡(luò),準(zhǔn)確率可以達到99%以上。

一些體會與感想

我本人是一名iOS開發(fā),也是迎著人工智能的浪潮開始一路學(xué)習(xí),我覺得人工智能終將改變我們的生活,也會成為未來的一個熱門學(xué)科。這一個多月的自學(xué)下來,我覺得最為困難的是克服自己的畏難情緒,因為我完全沒有AI方面的任何經(jīng)驗,而且工作年限太久,線性代數(shù),概率論等知識早已還給老師,所以在開始的時候,總是反反復(fù)復(fù)不停猶豫,糾結(jié)到底要不要把時間花費在研究深度學(xué)習(xí)上面。但是后來一想,假如我不學(xué)AI的東西,若干年后,AI發(fā)展越發(fā)成熟,到時候想學(xué)也會難以跟上步伐,而且,讓電腦學(xué)會思考這本身就是一件很讓人興奮的事情,既然想學(xué),有什么理由不去學(xué)呢?與大家共勉。

參考文章:

https://zhuanlan.zhihu.com/p/25482889

https://hit-scir.gitbooks.io/neural-networks-and-deep-learning-zh_cn/content/chap1/c1s0.html

到此這篇關(guān)于解析Tensorflow之MNIST的使用的文章就介紹到這了,更多相關(guān)Tensorflow MNIST內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python hough變換檢測直線的實現(xiàn)方法

    python hough變換檢測直線的實現(xiàn)方法

    這篇文章主要介紹了python hough變換檢測直線的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • python隱藏終端執(zhí)行cmd命令的方法

    python隱藏終端執(zhí)行cmd命令的方法

    今天小編就為大家分享一篇python隱藏終端執(zhí)行cmd命令的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • python多進程及通信實現(xiàn)異步任務(wù)的方法

    python多進程及通信實現(xiàn)異步任務(wù)的方法

    這篇文章主要介紹了python多進程及通信實現(xiàn)異步任務(wù)需求,本人也是很少接觸多進程的場景,對于python多進程的使用也是比較陌生的。在接觸了一些多進程的業(yè)務(wù)場景下,對python多進程的使用進行了學(xué)習(xí),覺得很有必要進行一個梳理總結(jié),感興趣的朋友一起看看吧
    2022-05-05
  • Python使用pypinyin實現(xiàn)中文拼音轉(zhuǎn)換

    Python使用pypinyin實現(xiàn)中文拼音轉(zhuǎn)換

    pypinyin是一個Python庫,用于將中文漢字轉(zhuǎn)換為拼音,這篇文章主要為大家詳細(xì)介紹了pypinyin的基本用法并探討其應(yīng)用場景,需要的可以參考下
    2024-02-02
  • Python 多線程實例詳解

    Python 多線程實例詳解

    這篇文章主要介紹了Python 多線程實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境完整圖文教程

    使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境完整圖文教程

    這篇文章主要給大家介紹了關(guān)于使用Pycharm為項目創(chuàng)建一個虛擬環(huán)境的相關(guān)資料,我們在使用pycharm做項目時,最好給每一個工程都創(chuàng)建一個虛擬環(huán)境,將對應(yīng)的安裝包放在該虛擬環(huán)境中,避免項目與項目之間產(chǎn)生關(guān)系或沖突,便于管理,需要的朋友可以參考下
    2023-09-09
  • Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式)

    Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式)

    這篇文章主要介紹了Django之富文本(獲取內(nèi)容,設(shè)置內(nèi)容方式),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 詳解如何在ChatGPT內(nèi)構(gòu)建一個Python解釋器

    詳解如何在ChatGPT內(nèi)構(gòu)建一個Python解釋器

    這篇文章主要為大家詳細(xì)介紹了如何在ChatGPT內(nèi)構(gòu)建一個Python解釋器,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,需要的可以參考一下
    2023-02-02
  • Python+Appium實現(xiàn)自動搶微信紅包

    Python+Appium實現(xiàn)自動搶微信紅包

    不知從何時開始微信紅包橫空出世,對于網(wǎng)速和手速慢的人只能在一旁觀望,做為python的學(xué)習(xí)者就是要運用編程解決生活和工作上的事情。于是我用python解決我們的手速問題python實現(xiàn)自動搶微信紅包,至于網(wǎng)速慢得那就只能自己花錢提升了。
    2021-05-05
  • Python決策樹之基于信息增益的特征選擇示例

    Python決策樹之基于信息增益的特征選擇示例

    這篇文章主要介紹了Python決策樹之基于信息增益的特征選擇,結(jié)合實例形式分析了決策樹中基于信息增益的特征選擇原理、計算公式、操作流程以及具體實現(xiàn)技巧,需要的朋友可以參考下
    2018-06-06

最新評論