1. 程式人生 > >Tensorflow深度學習之七:再談mnist手寫數字識別程式

Tensorflow深度學習之七:再談mnist手寫數字識別程式

之前學習的第一個深度學習的程式就是mnist手寫字型的識別,那個時候對於很多概念不是很理解,現在回過頭再看當時的程式碼,理解了很多,現將加了註釋的程式碼貼上,與大家分享。(本人還是在學習Tensorflow的初始階段,如果有什麼地方理解有誤,還請大家不吝指出。)

from tensorflow.examples.tutorials.mnist import input_data

# 下載mnist資料集至當前目錄下的MNIST_data資料夾,並讀取資料。
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)

# 輸出訓練集,測試集,驗證集圖片的shape和標籤的shape。
print(mnist.train.images.shape, mnist.train.labels.shape) print(mnist.test.images.shape, mnist.test.labels.shape) print(mnist.validation.images.shape, mnist.validation.labels.shape) import tensorflow as tf # 預設會話。 sess = tf.InteractiveSession() # 定義一個placeholder,用於儲存輸入的圖片的資訊。 # 由於圖片中的數值是0~1之間的浮點數,所以x的資料型別也應是tf.float32。
# 第二個引數表示x的維度,其中None表示不限制輸入的數量,之後的引數便是輸入的資料的維度, # 這裡的784表示輸入的是一個長度為784的一維向量。 x = tf.placeholder(tf.float32, [None, 784]) # 定義權重變數,該變數是一個784x10的矩陣,這裡將初始權重全部賦值為0。 W = tf.Variable(tf.zeros([784, 10])) # 定義偏置值變數,該變數是一個由10個元素組成的向量,同樣這裡的偏置值變數的初始值也全部被賦值為0。 b = tf.Variable(tf.zeros([10])) # 定義softmax層,輸入是一個10個元素組成的向量。
# tf.matmul是用於矩陣相乘的函式。 y = tf.nn.softmax(tf.matmul(x, W)+b) # 再次定義一個placeholder,用於儲存真實的圖片標籤。 y_ = tf.placeholder(tf.float32, [None, 10]) # 定義交叉熵,這是本程式需要使用的loss函式,我們的目的是使得這個loss函式儘可能的小。 cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1])) # 我們使用梯度下降的方法來優化引數,這裡把學習率設定為0.5,我們需要優化的函式是cross_entropy,即我們的loss函式。 train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy) # 初始化所有的全域性變數。 tf.global_variables_initializer().run() # 從這裡開始訓練我們建立好的模型。 # 從上面的公式中可以看出,我們建立的是一個全連線的模型,本質上是對矩陣乘法的優化。 # 我們訓練1000次。 for i in range(1000): # 使用mnist自帶的方法隨機產生100個數據。 batch_xs, batch_ys = mnist.train.next_batch(100) # 將這100個數據分別feed給上面我們定義的兩個placeholder,由於訓練模型。 train_step.run({x:batch_xs,y_:batch_ys}) # 建立評估模型正確預測的Graph。 correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(y_, 1)) # 定義準確率的計算公式。 accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) # 將測試集資料傳遞給兩個placeholder,然後執行上述定義的準確率的公式,最後輸出準確率的值。 print(accuracy.eval({x: mnist.test.images, y_: mnist.test.labels}))

執行結果如下:(因為使用了梯度下降的方法,因此每一次執行的結果或有不同,一般結果在0.92左右)

Extracting MNIST_data/train-images-idx3-ubyte.gz
Extracting MNIST_data/train-labels-idx1-ubyte.gz
Extracting MNIST_data/t10k-images-idx3-ubyte.gz
Extracting MNIST_data/t10k-labels-idx1-ubyte.gz
(55000, 784) (55000, 10)
(10000, 784) (10000, 10)
(5000, 784) (5000, 10)
0.9184

相關推薦

Tensorflow深度學習mnist數字識別程式

之前學習的第一個深度學習的程式就是mnist手寫字型的識別,那個時候對於很多概念不是很理解,現在回過頭再看當時的程式碼,理解了很多,現將加了註釋的程式碼貼上,與大家分享。(本人還是在學習Tensorflow的初始階段,如果有什麼地方理解有誤,還請大家不吝指出。)

Tensorflow案例5CNN演算法-Mnist數字識別

學習目標 目標 應用tf.nn.conv2d實現卷積計算 應用tf.nn.relu實現啟用函式計算 應用tf.nn.max_pool實現池化層的計算 應用卷積神經網路實現影象分類識別 應用

TensorFlow筆記(1)非線性迴歸、MNIST數字識別

程式 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt # numpy生成200個隨機點,下面這麼寫可以得到200行1列的矩陣 x_data = np.linspace(-0.5,

Tensorflow深度學習啟用函式

啟用函式的作用 在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。 我們嘗試引入非線性的因素,對樣本進行分類。 在神經網路中也類似,我們需要引入一些非線性的因素,來更好地解決複雜的問題。而啟用函式恰好

TensorFlow實戰Google深度學習框架》--5.2.1 MNIST識別問題(程式已改進)

目錄 MNIST資料集介紹: TensorFlow完整訓練MNIST資料集(程式已改進): 本篇部落格涉及很多本書第4章的知識:啟用函式、指數衰減的學習率設定、正則化、滑動平均等知識。如有疑問請參考本部落格關於第4章記錄介紹。 MNIST資料集介紹: MNIST資料集是N

tensorflow 基礎學習MNIST數字識別

truncate averages val flow one die correct 表示 data MNIST數據集介紹: from tensorflow.examples.tutorials.mnist import input_data # 載入MNIST數據集,

TensorflowMNIST數字識別分類問題(1)

一、MNIST資料集讀取 one hot 獨熱編碼獨熱編碼是一種稀疏向量,其中:一個向量設為1,其他元素均設為0.獨熱編碼常用於表示擁有有限個可能值的字串或識別符號優點:   1、將離散特徵的取值擴充套件到了歐式空間,離散特徵的某個取值就對應歐式空間的某個點    2、機器學習演算法中,

TensorflowMNIST數字識別分類問題(2)

整體程式碼: #資料讀取 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np from tensorflow.examples.tutorials.mnist import input_data mnis

深度學習mnist數字識別入門

使用tensorflow框架和python,學習實現簡單的神經網路,並進行調參,程式碼如下:   #! /usr/bin/python # -*- coding:utf-8 -*- """ a simple mnist classifier """ from __fut

深度學習路, 從邏輯迴歸開始, 一個分類器.

要給同事講神經網路和tensorflow. 需要普及一些前導知識. 所以我準備了一個課件, 寫了下面這個不使用工具和庫,全手寫的分類器. . 個人感覺, 對於幫助理解機器學習的具體實現過程是很有幫助的. (僅僅為了演示原理,實現寫的比較粗糙,談不上效能.

mnist數字識別——深度學習入門專案(tensorflow+keras+Sequential模型)

前言 今天記錄一下深度學習的另外一個入門專案——《mnist資料集手寫數字識別》,這是一個入門必備的學習案例,主要使用了tensorflow下的keras網路結構的Sequential模型,常用層的Dense全連線層、Activation啟用層和Reshape層。還有其他方法訓練手寫數

TensorFlow(十二)使用RNN實現數字識別

rop mea pre rnn ext ini tro truncate tutorial 上代碼: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #

tensorflow實戰MNIST數字識別的優化2-代價函式優化,準確率98%

最簡單的tensorflow的手寫識別模型,這一節我們將會介紹其簡單的優化模型。我們會從代價函式,多層感知器,防止過擬合,以及優化器的等幾個方面來介紹優化過程。    1.代價函式的優化:             我們可以這樣將代價函式理解為真實值與預測值的差距,我們神經

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

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

OpenCV機器學習SVM分類器實現MNIST數字識別

0. 開發環境 最近機器學習隨著AI人工智慧的興起越來越火,博主想找一些ML的庫來練手。突然想起之前在看Opencv的doc時發現有ML的component,於是心血來潮就開始寫程式碼試試。話不多說,直接進正題。 以下我的開發環境配置: -Windows7

TensorFlow實現機器學習的“Hello World”--Mnist數字識別

TensorFlow實現機器學習的“Hello World” 上一篇部落格我們已經說了TensorFlow大概怎麼使用,這次來說說機器學習中特別經典的案例,也相當於是機器學習的“Hello World”,他就是Mnist手寫數字識別,也就是通過訓練機器讓他能看

TensorFlow筆記之一MNIST數字識別

     本人剛剛開始接觸深度學習不久,對於tensorflow的瞭解也有限,想通過tensorflow這個框架來學習深度學習及其優化與識別。現在直接進入主題。     1.手寫識別的介紹:            MNIST手寫識別在機器學習中就像c語言中Hello Wor

pytorch學習MNIST數字識別程式碼

# -*- coding: utf-8 -*- """ Created on Mon Sep 3 08:38:27 2018 @author: www """ import torch from torch import nn from torchvision.data

Caffe學習筆記(六)mnist數字識別訓練例項

一、前言    深度學習的一個簡單例項就是mnist手寫數字識別,只要這個例子弄明白,其它的內容就可以舉一反三了。之前的內容如有遺忘,可以進行回顧。 二、準備資料    資料集可以直接從我的github下載,包括資料集和程式碼,使用如下指令:

[052]TensorFlow Layers指南基於CNN的數字識別

TensorFlow Layers module 為容易的建立一個神經網路提供了高水平的API介面。它提供了很多方法幫助建立dense(全連線)層和卷積層,增加啟用函式和應用dropout做歸一化。在這個教程中,你會學到如何用layers構建一個卷積神經網路用於