1. 程式人生 > >用tensorflow的slim模組快速實現mnist手寫體識別分類

用tensorflow的slim模組快速實現mnist手寫體識別分類

import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.examples.tutorials.mnist import mnist
import tensorflow.contrib.slim as slim

mnist=input_data.read_data_sets('../share/MNIST_DATA',one_hot=True)
x=tf.placeholder("float",shape=[None,784])
y_=tf.placeholder("float",shape=[None,10])

#cast x to 3D
x_image=tf.reshape(x,[-1,28,28,1])#shape of x is [N,28,28,1]

#conv layer1
net=slim.conv2d(x_image,32,[5,5],scope='conv1')#shape of net is [N,28,28,32]
net=slim.max_pool2d(net,[2,2],scope='pool1')#shape of net is [N,14,14,32]

#conv layer2
net=slim.conv2d(net,64,[5,5],scope='conv2')#shape of net is [N,14,14,64]
net=slim.max_pool2d(net,[2,2],scope='pool2')#shape of net is [N,7,7,64]

#reshape for full connection
net=tf.reshape(net,[-1,7*7*64])#[N,7*7*64]

#fc1
net=slim.fully_connected(net,1024,scope='fc1')#shape of net is [N,1024]

#dropout layer
keep_prob=tf.placeholder('float')
net=tf.nn.dropout(net,keep_prob)
#fc2
net=slim.fully_connected(net,10,scope='fc2')#[N,10]
#softmax
y=tf.nn.softmax(net)#[N,10]

cross_entropy=-tf.reduce_sum(tf.multiply(y_,tf.log(y)))#y and _y have same shape.
train_step=tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction=tf.equal(tf.argmax(y,axis=1),tf.argmax(y_,axis=1))#shape of correct_prediction is [N]
accuracy=tf.reduce_mean(tf.cast(correct_prediction,'float'))

init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    for i in range(10000):
        batch=mnist.train.next_batch(50)
        if i%100==0:
            train_accuracy=sess.run(accuracy,feed_dict={x:batch[0],y_:batch[1],keep_prob:1.0})
            print('step %d,training accuracy  %g !!!!!!!'%(i,train_accuracy))
        sess.run(train_step,feed_dict={x:batch[0],y_:batch[1],keep_prob:0.5})

    total_accuracy=sess.run(accuracy,feed_dict={x:mnist.test.images,y_:mnist.test.labels,keep_prob:1.0})
    print('test_accuracy  %s!!!!!!!'%(total_accuracy))

直接貼程式碼,程式碼沒什麼好說的了,我都做了註釋了。主要是參考TensorFlow官網上的教程點選開啟連結,但是使用了slim模組(slim介紹參考我的這個部落格點選開啟連結),於是大大縮小了程式碼量,也提高了程式碼的可讀性,強烈推薦slim模組。當然如果對上述程式碼中的函式不熟悉的可直接去TensorFlow官網檢視API手冊,裡面介紹得非常詳盡。當然在除錯程式碼時最重要的還是關注tensor的shape,於是我在每個tensor變數後都註釋了shape,方便除錯,也能提高程式的可讀性。

後面得到的結果展示


相關推薦

tensorflow的slim模組快速實現mnist手寫體識別分類

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from tensorflow.examples.tutorials.mnist import mnist

TensorFlow實現MNIST手寫體識別

# -*- coding: utf-8 -*- #匯入資料集 from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("MINST_data/",one_hot = T

python神經網路案例——CNN卷積神經網路實現mnist手寫體識別

全棧工程師開發手冊 (作者:欒鵬) 載入樣本資料集 首先我們要有手寫體的資料集檔案 我們實現一個MNIST.py檔案,專門用來讀取手寫體檔案中的資料。 # -*- coding: UTF-8 -*- # 獲取手寫資料。

tensorflow實戰一---基於線性迴歸簡單實現mnist手寫體識別

Mnist手寫體識別是tensorflow的入門經典教程,此處的mnist的手寫體識別率達到了91%,優化演算法為梯度下降演算法,啟用函式為softmax迴歸,沒有中間層,基本步驟可以分為七步。 1、設定變數 2、設定資料與結果的計算關係(設定圖) 3、設定優化演算法(梯度

keras中使用MLP(多層感知機)神經網路來實現MNIST手寫體識別

    Keras是一個基於python的的深度學習框架,比tensorflow更簡單易用,適合入門學習,本篇文章主要介紹使用keras實現手寫體識別任務。環境為python3+,Keras2.1,神經網路基礎知識在此不做過多介紹。    1.    載入MNIST資料。方式

支援向量機(SVM)實現MNIST手寫體數字識別

一、SVM演算法簡述 支援向量機即Support Vector Machine,簡稱SVM。一聽這個名字,就有眩暈的感覺。支援(Support)、向量(Vector)、機器(Machine),這三個毫無關聯的詞,硬生生地湊在了一起。從修辭的角度,這個合成詞最終落腳到”Machine”上,還以

GradientBoosting和AdaBoost實現MNIST手寫體數字識別

一、兩種演算法簡介: Boosting 演算法簡介 Boosting演算法,我理解的就是兩個思想: 1)“三個臭皮匠頂個諸葛亮”,一堆弱分類器的組合就可以成為一個強分類器; 2)“知錯能改,善莫大焉”,不斷地在錯誤中學習,迭代來降低犯錯概率 當然,要理解好Boosting的思

1.MNIST手寫體識別Softmax&&CNN兩種實現

一、MNIST資料集簡介        MNIST資料集是由一些手寫數字的圖片和相應的標籤組成,標籤共有十類,分別對應0~9,下面給出資料集的具體示例: 原始資料集包含以下四個檔案,在tensorflow中,通過input_data模組,呼叫read_da

快速實現圖片區域性識別的方法

      圖片區域性識別的問題隨著現在圖片傳輸資訊的盛行,越來越頻繁的出現在大家的視野中,那麼在現在快節奏的辦公氛圍下,我們應該怎樣快速實現圖片區域性識別呢?下面小編就通過藉助圖片文字識別軟體來為大家分享一個可以快速實現圖片區域性識別的方法吧。   &n

迴圈神經網路系列(四)基於LSTM的MNIST手寫體識別

我們知道迴圈神經網路是用來處理包含序列化資料的相關問題,所有若要利用迴圈神經網路來解決某類問題,那麼首先要做的就是將原始資料集序列化,然後處理成某個深度學習框架所接受的資料輸入格式(比如Tensorflow). 1.資料預處理 我們知道MNIST資料集中的每張圖片形

教你如何在網頁上利用H5快速實現動畫效果

meta ole adding play tor margin time 方式 scrip 在web開發中,GIF動畫效果是隨處可見,比如常見的loading加載、人物奔跑的gif圖片等等,那麽這些都是怎麽實現的呢?其實實現的原理很簡單,簡而言之,這些所謂的動畫都是一幀一幀

MNIST手寫體識別--tensorflow

MNIST手寫體識別--tensorflow 對於tensorflow給出的幾個版本的手寫體識別的程式碼進行分析。其中tensorflow的mnist程式碼在https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examp

ML(四)——RNN實現MNIST識別

一.說明 本文使用的程式碼來自網上的開源專案 二.什麼是RNN 三.程式碼實現MNIST的識別 首先,慣例讀入MNIST import tensorflow as tf from tensorflow.examples.tutorials.mnist imp

Tensorflow 入門學習9.MNIST手寫體識別

本文使用TensorFlow進行MNIST手寫體識別。 MNIST資料集 MNIST是一個入門級的計算機視覺資料集,它包含各種手寫數字圖片。官網地址:Yann LeCun’s website 下載資料集 下載後資料集: 下載的資料集分成兩部分,60000

tensorflow11:雙隱層+softmax迴歸實現mnist圖片識別

概述 上篇文章講到的sofmax迴歸,除了輸入層,只有線性層+sofmax,這兩者合起來可以被稱為輸出層。沒有中間的隱藏層。 本文介紹在sofmax迴歸基礎上增加兩層隱藏層的方法。 本文的主要參考來自參考資料裡的《TensorFlow運作方式入門》和《Tenso

tensorflow 12:雙隱層+softmax迴歸實現mnist圖片識別之二

概述 tensorflow的自帶例程用兩個檔案演示了“全連線層+softmax迴歸”實現mnist圖片識別的功能。一個檔案是mnist.py,在之前一篇文章《tensorflow 11:雙隱層+softmax迴歸實現mnist圖片識別》已經介紹過了。不過mnis

雲函式快速實現圖片爬蟲

本文會跟大家介紹,如何在本地使用知曉云云函式 API 與 cheerio 開發一個圖片爬蟲,並使用 webpack 與 mincloud 將程式碼打包並上傳部署到知曉雲。 技術棧: 程式碼打包工具:[email protected] 部署工具:[em

卷積神經網路(二):應用簡單卷積網路實現MNIST數字識別

卷積神經網路簡單實現MNIST數字識別 本篇的主要內容: 一個兩層卷積層的簡單卷積網路的TensorFlow的實現 網路的結構 在這張圖裡,我把每一層的輸入以及輸出的結構都標註了,結合閱讀程式碼食用效果更佳。 具體程式碼 具體的內容,都寫在相應位置的註釋中

從零使用OpenCV快速實現簡單車牌識別系統

不錯的計算機視覺部落格:http://blog.csdn.net/lee_cv/article/details/9180719 篇文章獻給所有第一次聽說車牌識別ANPR但需要短時間實現的苦逼同學們。 最近的小學期實訓做的是一個車牌識別系統,說實話真不知道學校怎麼想的,雖

MNIST手寫體識別任務

下面我們介紹一個神經網路中的經典示例,MNIST手寫體識別。這個任務相當於是機器學習中的HelloWorld程式。 MNIST資料集介紹 MNIST是一個簡單的圖片資料集,包含了大量的數字手寫體圖片。下面是一些示例圖片: MNIST資料集是含標註資訊的,以上圖片