最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

神經(jīng)網(wǎng)絡(luò):最初是一個生物學(xué)的概念,一般是指大腦神經(jīng)元,觸點(diǎn),細(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大?。ㄈ缦聢D),而且都是黑白色構(gòu)成(這里的黑色是一個0-1的浮點(diǎn)數(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表示每一個特征值(像素點(diǎn))會影響結(jié)果的權(quán)重
 W = tf.Variable(tf.zeros([784, 10]))
 b = tf.Variable(tf.zeros([10]))
 y = tf.matmul(x, W) + b
# 是圖片實(shí)際對應(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)成,也就是說,每一個點(diǎn)都是這個圖片的一個特征,這個其實(shí)比較好理解,因?yàn)槊恳粋€點(diǎn)都會對圖片的樣子和表達(dá)的含義有影響,只是影響的大小不同而已。至于為什么要將28*28的矩陣攤平成為一個1行784列的一維數(shù)組,我猜測可能是因?yàn)檫@樣做會更加簡單直觀。

W(特征值對應(yīng)的權(quán)重):這個值很重要,因?yàn)槲覀兩疃葘W(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_(真實(shí)結(jié)果):來自MNIST的訓(xùn)練集,每一個圖片所對應(yīng)的真實(shí)值,如果是6,則表示為:[0 0 0 0 0 1 0 0 0]

再下面兩行代碼是損失函數(shù)(交叉熵)和梯度下降算法,通過不斷的調(diào)整權(quán)重和偏置量的值,來逐步減小根據(jù)計(jì)算的預(yù)測結(jié)果和提供的真實(shí)結(jié)果之間的差異,以達(dá)到訓(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次,以達(dá)到訓(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)代碼運(yùn)行起來以后,我們發(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('實(shí)際的值是:',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ù)測值和實(shí)際值不符合的圖片,然后我們把值和圖片分別打印出來看看:

預(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。
實(shí)際的值是: [[ 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)確率可以達(dá)到99%以上。

一些體會與感想

我本人是一名iOS開發(fā),也是迎著人工智能的浪潮開始一路學(xué)習(xí),我覺得人工智能終將改變我們的生活,也會成為未來的一個熱門學(xué)科。這一個多月的自學(xué)下來,我覺得最為困難的是克服自己的畏難情緒,因?yàn)槲彝耆珱]有AI方面的任何經(jīng)驗(yàn),而且工作年限太久,線性代數(shù),概率論等知識早已還給老師,所以在開始的時候,總是反反復(fù)復(fù)不停猶豫,糾結(jié)到底要不要把時間花費(fèi)在研究深度學(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)文章

  • Permission denied的解決方法

    Permission denied的解決方法

    這篇文章主要介紹了Permission denied的解決方法,希望能給你帶來幫助
    2021-08-08
  • python中利用matplotlib讀取灰度圖的例子

    python中利用matplotlib讀取灰度圖的例子

    今天小編就為大家分享一篇python中利用matplotlib讀取灰度圖的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python中Django發(fā)送帶圖片和附件的郵件

    Python中Django發(fā)送帶圖片和附件的郵件

    本篇文章主要介紹了Python中Django發(fā)送帶圖片和附件的郵件 ,非常具有實(shí)用價值,需要的朋友可以參考下。
    2017-03-03
  • Python階乘求和的代碼詳解

    Python階乘求和的代碼詳解

    在本篇文章里小編給大家整理的是關(guān)于Python階乘求和的代碼實(shí)例,有需要的朋友們可以跟著學(xué)習(xí)下。
    2020-02-02
  • python實(shí)現(xiàn)最大子序和(分治+動態(tài)規(guī)劃)

    python實(shí)現(xiàn)最大子序和(分治+動態(tài)規(guī)劃)

    這篇文章主要介紹了python實(shí)現(xiàn)最大子序和(分治+動態(tài)規(guī)劃),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python中的枚舉函數(shù)enumerate()的具體用法

    Python中的枚舉函數(shù)enumerate()的具體用法

    本文主要介紹了Python中的枚舉函數(shù)enumerate()的具體用法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • 深入理解Python中range和xrange的區(qū)別

    深入理解Python中range和xrange的區(qū)別

    這篇文章主要介紹了深入理解Python中range和xrange的區(qū)別,從用法和輸出等方便詳細(xì)介紹了之間的差別。
    2017-11-11
  • Python爬蟲之爬取嗶哩嗶哩熱門視頻排行榜

    Python爬蟲之爬取嗶哩嗶哩熱門視頻排行榜

    這篇文章主要介紹了Python爬蟲之爬取嗶哩嗶哩熱門視頻排行榜,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • Python上傳package到Pypi(代碼簡單)

    Python上傳package到Pypi(代碼簡單)

    這篇文章主要介紹了Python上傳package到Pypi(代碼簡單)的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • Python 如何創(chuàng)建一個簡單的REST接口

    Python 如何創(chuàng)建一個簡單的REST接口

    這篇文章主要介紹了Python 如何創(chuàng)建一個簡單的REST接口,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論

荆门市| 宜章县| 黄冈市| 通城县| 陇南市| 雅安市| 巴马| 江都市| 平乐县| 敦化市| 安康市| 万宁市| 五原县| 周宁县| 乡城县| 察隅县| 行唐县| 大埔县| 团风县| 河源市| 蓬莱市| 汝南县| 石河子市| 南平市| 灵川县| 石阡县| 加查县| 西藏| 太仆寺旗| 明水县| 平山县| 察雅县| 易门县| 德令哈市| 调兵山市| 博罗县| 湘西| 长海县| 福泉市| 公主岭市| 保山市|