日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用tensorflow搭建RNN(LSTM)進行MNIST 手寫數字辨識

循環神經網絡RNN相比傳統的神經網絡在處理序列化數據時更有優勢,因為RNN能夠將加入上(下)文信息進行考慮。一個簡單的RNN如下圖所示:

將這個循環展開得到下圖:

上一時刻的狀態會傳遞到下一時刻。這種鏈式特性決定了RNN能夠很好的處理序列化的數據,RNN 在語音識別,語言建模,翻譯,圖片描述等問題上已經取得了很到的結果。
根據輸入、輸出的不同和是否有延遲等一些情況,RNN在應用中有如下一些形態:

RNN存在的問題

RNN能夠把狀態傳遞到下一時刻,好像對一部分信息有記憶能力一樣,如下圖:

h3

的值可能會由x1,x2的值來決定。
但是,對于一些復雜場景

由于距離太遠,中間間隔了太多狀態,x1,x2對ht+1

的值幾乎起不到任何作用。(梯度消失和梯度爆炸)

LSTM(Long Short Term Memory)

由于RNN不能很好地處理這種問題,于是出現了LSTM(Long Short Term Memory)一種加強版的RNN(LSTM可以改善梯度消失問題)。簡單來說就是原始RNN沒有長期的記憶能力,于是就給RNN加上了一些記憶控制器,實現對某些信息能夠較長期的記憶,而對某些信息只有短期記憶能力。
如上圖所示,LSTM中存在Forget Gate,Input Gate,Output Gate來控制信息的流動程度。
RNN:

LSTN:

加號圓圈表示線性相加,乘號圓圈表示用gate來過濾信息。

Understanding LSTM中對LSTM有非常詳細的介紹。(對應的中文翻譯)

LSTM MNIST手寫數字辨識

實際上,圖片文字識別這類任務用CNN來做效果更好,但是這里想要強行用LSTM來做一波。
MNIST_data中每一個image的大小是28*28,以行順序作為序列輸入,即第一行的28個像素作為$x_{0}
,第二行為

x_1,...,第28行的28個像素作為

x_28$輸入,一個網絡結構總共的輸入是28個維度為28的向量,輸出值是10維的向量,表示的是0-9個數字的概率值。這是一個many to one的RNN結構。
下面直接上代碼:

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data', one_hot=True)# 參數設置 BATCH_SIZE = 100 # BATCH的大小,相當于一次處理50個image TIME_STEP = 28 # 一個LSTM中,輸入序列的長度,image有28行 INPUT_SIZE = 28 # x_i 的向量長度,image有28列 LR = 0.01 # 學習率 NUM_UNITS = 100 # 多少個LTSM單元 ITERATIONS=8000 # 迭代次數 N_CLASSES=10 # 輸出大小,0-9十個數字的概率# 定義 placeholders 以便接收x,y train_x = tf.placeholder(tf.float32, [None, TIME_STEP * INPUT_SIZE]) # 維度是[BATCH_SIZE,TIME_STEP * INPUT_SIZE] image = tf.reshape(train_x, [-1, TIME_STEP, INPUT_SIZE]) # 輸入的是二維數據,將其還原為三維,維度是[BATCH_SIZE, TIME_STEP, INPUT_SIZE] train_y = tf.placeholder(tf.int32, [None, N_CLASSES]) # 定義RNN(LSTM)結構 rnn_cell = tf.contrib.rnn.BasicLSTMCell(num_units=NUM_UNITS) outputs,final_state = tf.nn.dynamic_rnn(cell=rnn_cell, # 選擇傳入的cellinputs=image, # 傳入的數據initial_state=None, # 初始狀態dtype=tf.float32, # 數據類型time_major=False, # False: (batch, time step, input); True: (time step, batch, input),這里根據image結構選擇False ) output = tf.layers.dense(inputs=outputs[:, -1, :], units=N_CLASSES)

這里outputs,final_state = tf.nn.dynamic_rnn(...).
final_state包含兩個量,第一個為c保存了每個LSTM任務最后一個cell中每個神經元的狀態值,第二個量h保存了每個LSTM任務最后一個cell中每個神經元的輸出值,所以c和h的維度都是[BATCH_SIZE,NUM_UNITS]。
outputs的維度是[BATCH_SIZE,TIME_STEP,NUM_UNITS],保存了每個step中cell的輸出值h。
由于這里是一個many to one的任務,只需要最后一個step的輸出outputs[:, -1, :],output = tf.layers.dense(inputs=outputs[:, -1, :], units=N_CLASSES) 通過一個全連接層將輸出限制為N_CLASSES。

loss = tf.losses.softmax_cross_entropy(onehot_labels=train_y, logits=output) # 計算loss train_op = tf.train.AdamOptimizer(LR).minimize(loss) #選擇優化方法correct_prediction = tf.equal(tf.argmax(train_y, axis=1),tf.argmax(output, axis=1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction,'float')) #計算正確率sess = tf.Session() sess.run(tf.global_variables_initializer()) # 初始化計算圖中的變量for step in range(ITERATIONS): # 開始訓練x, y = mnist.train.next_batch(BATCH_SIZE) test_x, test_y = mnist.test.next_batch(5000)_, loss_ = sess.run([train_op, loss], {train_x: x, train_y: y})if step % 500 == 0: # test(validation)accuracy_ = sess.run(accuracy, {train_x: test_x, train_y: test_y})print('train loss: %.4f' % loss_, '| test accuracy: %.2f' % accuracy_)

訓練過程輸出:

train loss: 2.2990 | test accuracy: 0.13 train loss: 0.1347 | test accuracy: 0.96 train loss: 0.0620 | test accuracy: 0.97 train loss: 0.0788 | test accuracy: 0.98 train loss: 0.0160 | test accuracy: 0.98 train loss: 0.0084 | test accuracy: 0.99 train loss: 0.0436 | test accuracy: 0.99 train loss: 0.0104 | test accuracy: 0.98 train loss: 0.0736 | test accuracy: 0.99 train loss: 0.0154 | test accuracy: 0.98 train loss: 0.0407 | test accuracy: 0.98 train loss: 0.0109 | test accuracy: 0.98 train loss: 0.0722 | test accuracy: 0.98 train loss: 0.1133 | test accuracy: 0.98 train loss: 0.0072 | test accuracy: 0.99 train loss: 0.0352 | test accuracy: 0.98

可以看到,雖然RNN是擅長處理序列類的任務,在MNIST手寫數字圖片辨識這個任務上,RNN同樣可以取得很高的正確率。

參考:
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://yjango.gitbooks.io/superorganism/content/lstmgru.html
參考代碼

https://www.cnblogs.com/sandy-t/p/6930608.html

有些人,一輩子都沒有得到過自己想要的,因為他們總是半途而廢

總結

以上是生活随笔為你收集整理的用tensorflow搭建RNN(LSTM)进行MNIST 手写数字辨识的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线播放第一页 | 女女百合高h喷汁呻吟玩具 www.亚洲一区 | 毛片.com | 天天综合色网 | 神马久久av | 激情欧美一区 | 无码人妻aⅴ一区二区三区日本 | 亚洲成人自拍网 | 深夜网站在线观看 | 中文字幕校园春色 | 国产在线拍揄自揄拍 | 福利视频在线播放 | 日韩中文一区二区 | 狠狠搞av | 国产精品无码人妻一区二区在线 | 日本高清无吗 | h片网站在线观看 | 亚洲成人精品久久 | 播色网| 精品99久久 | 午夜伦理在线观看 | 中文免费视频 | 自拍偷拍21p| 亚洲尤物视频 | 中文字幕丰满人伦在线 | 欧美成人黄色片 | 伊人久久大香线蕉av一区 | 日韩资源在线 | 日产精品久久久久久久蜜臀 | 深夜福利视频导航 | 国产91精品露脸国语对白 | 一级片在线 | 国产a国产片国产 | 国产精品亚洲αv天堂无码 伊人性视频 | 欧美一区三区 | 亚洲爽妇网| 老牛影视av老牛影视av | 长篇高h乱肉辣文 | 三级福利视频 | 奇米影视网| 久久另类ts人妖一区二区 | 国产一区不卡 | 日本四虎影院 | 天天摸天天| avt天堂网 | 999精品一区 | 经典av在线 | 亚洲av综合色区 | 欧美日韩在线视频 | 红桃视频一区 | 丝袜美女啪啪 | 亚洲人交配| 婷婷激情电影 | h无码动漫在线观看 | 久久久夜 | 泰国午夜理伦三级 | 女生被草 | 国产精品成人免费看片 | 一区二区三区少妇 | 综合色综合 | 久久久久久天堂 | 欧美xx在线| 无码人妻h动漫 | 欧美日韩不卡合集视频 | 给我免费观看片在线电影的 | 欧美成人一区在线观看 | 亚洲精品国产91 | 农村老妇性真猛 | 亚洲综合情 | 天天躁日日躁狠狠躁喷水 | 免费av一区二区 | 欧美xo影院 | 春意影院福利社 | 性久久久 | 四季av一区二区夜夜嗨 | 国产一二三在线 | www.天堂av.com| 午夜成人在线视频 | 性xxxx| 国内精品一区二区 | 爱综合网 | 国内自拍视频在线观看 | 亚洲青草视频 | 久草视频在线免费播放 | 欧美日韩在线观看一区二区 | 欧美黑人精品一区二区 | 久久久久性色av无码一区二区 | 天堂在线中文在线 | 国产精品高潮呻吟av | 在线免费观看av不卡 | 超碰免费在线播放 | 538国产视频 | 蜜桃臀aⅴ精品一区二区三区 | 国产精品伦一区二区 | 密臀av一区二区 | 成人一区二区在线观看 | 一区二区视频播放 | 激情五月婷婷在线 | 久久成人小视频 |