mnist 数据集的识别源码解析
在基本跑完識別代碼后,再來談一談自己對代碼的理解;
1? ? ? 前向傳播過程文件(mnist_forward.py)
第一個函數get_weight(shape, regularizer);
? ? ? ? 定義了w的初值和正則化損失加入losses中
第二個函數get_bias(shape):
? ? ? ? 對參數b進行設定
第三個函數forward(x, regularizer):
? ? ? ? 加入激活函數tf.nn.relu(tf.matmul(x, w1) + b1)
? ? ? ? 對輸出y進行設定
此段代碼在前面博客中講過,比較簡單,就不再過多敘述
2? ?反向傳播過程文件(mnist_backward.py)?
ce = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=y, labels=tf.argmax(y_, 1))在計算交叉熵之前,通常要用到softmax層來計算結果的概率分布。因為softmax層并不會改變最終的分類結果(排序),所以,tensorflow將softmax層與交叉熵函數進行封裝,形成一個函數方便計算:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?tf.nn.softmax_cross_entropy_with_logits(logits= , labels=)。
為了加速計算過程,針對只有一個正確答案(例如MNIST識別)的分類問題
這里用到softmax()函數;可以參考我前面博文。地址:
https://www.cnblogs.com/fcfc940503/p/10983906.html
https://www.cnblogs.com/fcfc940503/p/10985129.html
讀入數據
? xs, ys = mnist.train.next_batch(BATCH_SIZE)
_, loss_value, step = sess.run([train_op, loss, global_step], feed_dict={x: xs, y_: ys})用 mnist.train.next_batch(BATCH_SIZE)隨機從訓練集中抽取BATCH_SIZE個樣本輸入神經網絡;feed_dict={x: xs, y_: ys}喂入x和y_; 測試過程文件(mnist_test.py)?
在測試過程中,導入了引入 time 模塊、tensorflow、input_data、前向傳播mnist_forward、反向傳播 mnist_backward 模塊和 os 模塊,并規定程序 5 秒的循環間隔時間。 with tf.Graph().as_default() as g: 此函數利用tf.Graph()復現之前定義的計算圖,就是將定義好的神將網絡在計算圖中復現 correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 此函數是計算模型在測試集上的準確率;
其中
? ? ? ? ? ? y 表示在一組數據(即 batch_size 個數據)上神經網絡模型的預測結果,y 的形狀為[batch_size,10],每一行表示一張圖片的識別結果。通過tf.argmax()函數取出每張圖片對應向量中最大值元素對應的索引值,組成長度為輸入數據 batch_size 個的一維數組。通過 tf.equal()函數判斷預測結果張量和實際標簽張量的每個維度是否相等,若相等則返回 True,不 相等則返回 False。
? ? ? ? ? ?通過 tf.cast() 函數將得到的布 爾 型 數 值 轉 化 為 實 數 型 ,
? ? ? ? ? 再通過tf.reduce_mean()函數求平均值,最終得到神經網絡模型在本組數據上的準確率
?
以上內容主要講解mnist 數據集的識別源碼中我認為不好理解或者還沒理解的內容,主要目的是為了熟悉該代碼的框架和相關內容。
以實例來增進知識的了解我認為更好吸收
轉載于:https://www.cnblogs.com/fcfc940503/p/10985561.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mnist 数据集的识别源码解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 雷林鹏分享:PHP 数组
- 下一篇: PB连接数据库