1. 程式人生 > >3、TensorFlow實現Softmax迴歸識別手寫數字

3、TensorFlow實現Softmax迴歸識別手寫數字

一、資料集介紹

55000個訓練集、10000個測試集、5000個驗證集。

手寫數字圖片28*28畫素,從二維結構轉化為一維(後面章節使用卷積神經網路會利用空間結構)=784維特徵。

0到9共10維label特徵。

from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)


二、多分類任務演算法選擇

SoftMax Regression演算法原理(略)

簡單點說,每個樣本都要算10個類的概率,選最高者。 類比到神經網路,是沒有隱藏層的最淺的神經網路。

三、四個步驟

1、定義演算法公式,也就是神經網路forward時的計算

2、定義loss,選定優化器,並指定優化器優化loss

3、迭代地對資料進行訓練

4、在測試集熵對準確率進行評測。

四、程式碼

import tensorflow as tf

sess = tf.InteractiveSession() #之後的運算預設在這個session裡面跑。

# 匯入資料集
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("MNIST_data/",one_hot=True)

# 變數初始化
x = tf.placeholder(tf.float32,[None,784])
w = tf.Variable(tf.zeros([784,10]))
b = tf.Variable(tf.zeros([10]))
y_ = tf.placeholder(tf.float32,[None,10]) # 真實數字類別

# 定義假設函式計算公式,tensorflow會自動計算forward和backward方法。
y = tf.nn.softmax(tf.matmul(x,w)+b)
# 定義損失函式公式 資訊熵
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),reduction_indices = [1]))
# 定義優化演算法 SGD學習速率 0.5
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)

#引數初始化
tf.global_variables_initializer().run()
#迭代執行訓練操作
for i in range(1000): # 迭代次數1000
	batch_xs, batch_ys = mnist.train.next_batch(100) # 選全部樣本計算量太大,只使用一小部分資料進行隨機梯度下降。
	sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))  #評估
accuracy = tf.reduce_mean(tf.cast(correct_prediction,"float"))  #將結果轉換為浮點數
sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels})  #輸出
五、補充

TensorFlow和Spark類似,我們定義的各個公式(cross_entropy、train_step、accuracy)其實只是計算圖,在執行程式碼時,計算還沒發生,只有等呼叫run方法並feed資料時,才真正執行。

雖然準確率有92%,但是線上利用還差的很遠。事實上,我們加個隱含層可達98%;引入卷積層、池化層後,可達99%;而目前基於卷積神經網路的state-of-the-art的方法已經可以達到99.8%的正確率。


六、思考

1、資料集支援其他格式嗎?或者可以轉化為該形式嗎?

2、結果輸出又是怎麼樣的呢?

相關推薦

3TensorFlow實現Softmax迴歸識別數字

一、資料集介紹 55000個訓練集、10000個測試集、5000個驗證集。 手寫數字圖片28*28畫素,從二維結構轉化為一維(後面章節使用卷積神經網路會利用空間結構)=784維特徵。 0到9共10維label特徵。 from tensorflow.examples.tut

TensorFlow實現Softmax Regression識別數字中"TimeoutError: [WinError 10060] 由於連接方在一段時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗”問題

http 截圖 技術 數字 alt 分享圖片 inf 主機 orf 出現問題: 在使用TensorFlow實現MNIST手寫數字識別時,出現“TimeoutError: [WinError 10060] 由於連接方在一段時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗”

TensorFlow實現Softmax Regression識別數字

本章已機器學習領域的Hello World任務----MNIST手寫識別做為TensorFlow的開始。MNIST是一個非常簡單的機器視覺資料集,是由幾萬張28畫素*28畫素的手寫數字組成,這些圖片只包含灰度值資訊。 import os os.environ['TF_CPP_MIN_LOG_LEVEL']=

tensorflow 學習 softmax Regression 識別數字

下面程式碼是來自 tensorflow 實戰一書, 主要包括三個部分: 1.構建模型 y=w*x+b 2.構建損失函式模型-交叉熵 3.構建查詢最優值方法–梯度下降 #!/user/bin/env python import tensorflow as tf sess = t

TensorFlow實戰之Softmax Regression識別數字

一次 說明 基本 過度 pro 分類函數 數值 fun nump 關於本文說明,本人原博客地址位於http://blog.csdn.net/qq_37608890,本文來自筆者於2018年02月21日 23:10:04所撰寫內容(http://blog.csdn.

Tensorflow實戰——利用Softmax Regression識別數字

1. 匯入資料集 2. 檢視資料集(784維【28*28】, label【10維】,訓練集,測試集,驗證集) 3. 定義輸入x,w,  b 4. 使用Softmax Regression模型 5. 使用cross-entropy作為loss-function 6

DeepLearning (四) 基於自編碼演算法與softmax迴歸數字識別

softmax 迴歸模型,是logistic 迴歸模型在多分類問題上的推廣。關於logistic迴歸演算法的介紹,前面部落格已經講得很清楚,詳情可以參考部落格 在logistic迴歸模型中,我們的激勵函式sigmoid的輸入為: z=θ0x0+θ1x

吳裕雄 python 神經網絡——TensorFlow實現AlexNet模型處理數字識別MNIST數據集

its iter style 輸出 init 向量 數字 ict sha import tensorflow as tf # 輸入數據 from tensorflow.examples.tutorials.mnist import input_data m

學習筆記TF024:TensorFlow實現Softmax Regression(回歸)識別數字

概率 none nump 簡單 測試數據 python dice bat desc TensorFlow實現Softmax Regression(回歸)識別手寫數字。MNIST(Mixed National Institute of Standards and Techno

tensorflow實現logistic迴歸進行寫字識別

1.資料準備 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data

TensorFlow實現Softmax迴歸(模型儲存與載入)

1 # -*- coding: utf-8 -*- 2 """ 3 Created on Thu Oct 18 18:02:26 2018 4 5 @author: zhen 6 """ 7 8 from tensorflow.examples.tutorials.mnist imp

機器學習筆記:tensorflow實現卷積神經網路經典案例--識別數字

從識別手寫數字的案例開始認識神經網路,並瞭解如何在tensorflow中一步步建立卷積神經網路。 安裝tensorflow 資料來源 kaggle新手入門的數字識別案例,包含手寫0-9的灰度值影象的csv檔案,下載地址:https://www.

6 TensorFlow實現cnn識別數字

———————————————————————————————————— 寫在開頭:此文參照莫煩python教程(牆裂推薦!!!) ———————————————————————————————————— 這個實驗的內容是:基於TensorFlow,實現

tensorflow實現CNN識別數字

上一篇使用TensorFlow識別手寫數字,是直接採用了softmax進行多分類,直接將28*28的圖片轉換成為了784維的向量作為輸入,然後通過一個(784,10)的權重,將輸入轉換成一個10維的向量,最後再將對每一個數字預測一個概率,概率最大的數字就是預測的結果。因為,

Kaggle Digit Recognizer識別數字入門賽基於tensorflow-GPU(TOP 15%)

本人原創,開源出來希望與大家互相學習。 ps:目前這個比賽前二三十名測試集的正確率為1,我覺得其中一個方法可能是將所有的樣本(從官網下載train set和 test set及其他們的標籤)喂入CNN學習,將訓練集正確率訓練到1.0就可以了,這樣用測試集測出來的結果就可以1.0了,但

Tensorflow案例4:Mnist數字識別(線性神經網路)及其侷限性

學習目標 目標 應用matmul實現全連線層的計算 說明準確率的計算 應用softmax_cross_entropy_with_logits實現softamx以及交叉熵損失計算 說明全連線層在神經網路的作用 應用全連

Android 通過 TensorFlow 訓練模型識別數字

隨著機器學習的發展,目前已經湧現出很多不錯的學習框架,其中 Google 推出的 Tensorflow 是最流行的可以說沒有之一,並且越來越多的機器學習成果應用到移動端,例如人臉檢測、語音識別的 App。本場 Chat 將用最簡單的方式,利用 Tensorflo

matlab神經網路實現識別數字

實驗說明 一直想自己寫一個神經網路來實現手寫數字的識別,而不是套用別人的框架。恰巧前幾天,有幸從同學那拿到5000張已經貼好標籤的手寫數字圖片,於是我就嘗試用matlab寫一個網路。 實驗資料:5000張手寫數字圖片(.jpg),圖片命名為1.jpg,2.

Python徒手實現識別數字—大綱

寫在前面 其實我之前寫過一個簡單的識別手寫數字的程式,但是因為邏輯比較簡單,而且要求比較嚴苛,是在50x50大小畫素的白底圖上手寫黑色數字,並且給的訓練材料也不夠多,導致準確率只能五五開。所以這一次準備寫一個加強升級版的,藉此來提升我對Python處理檔案與圖

TensorFlow在MNIST中的應用 識別數字(OpenCV+TensorFlow+CNN)

參考: 1.《TensorFlow技術解析與實戰》 2. http://blog.csdn.net/sparta_117/article/details/66965760 3. http://blog.csdn.net/HelloZEX/article/detail