經過:html
手寫數字識別 ----卷積神經網絡模型官方案例詳解(基於Tensorflow,Python)json
手寫數字識別 ----Softmax迴歸模型官方案例詳解(基於Tensorflow,Python)flask
運行程序後得的四個文件,再經過手寫的圖片判斷識別機率網絡
代碼:session
import numpy as np import tensorflow as tf from flask import Flask, jsonify, render_template, request import numpy as np from PIL import Image from mnist import model import matplotlib.pyplot as plt from matplotlib.image import imread # tf.placeholder(dtype, shape=None, name=None) # 此函數能夠理解爲形參,用於定義過程,在執行的時候再賦具體的 # dtype:數據類型。經常使用的是tf.float32,tf.float64等數值類型 # shape:數據形狀。默認是None,就是一維值,也能夠是多維,好比[2,3], [None, 3]表示列是3,行不定 # name:名稱。 # 返回:Tensor 類型
x = tf.placeholder("float", [None, 784]) '''用於運行TensorFlow操做的類。 '''
# session可能擁有的資源,如:tf.Variable,tf.QueueBase和tf.ReaderBase。 # 再也不須要時釋放這些資源是很是重要的。 # 爲此,請在session中調用tf.Session.close方法,或使用session做爲上下文管理器
sess = tf.Session() # 保存和恢復都須要實例化一個 tf.train.Saver。 # saver = tf.train.Saver() # 在訓練循環中,按期調用 saver.save() 方法,向文件夾中寫入包含了當前模型中全部可訓練變量的 checkpoint 文件。 # saver.save(sess, FLAGS.train_dir, global_step=step) # 以後,就能夠使用 saver.restore() 方法,重載模型的參數,繼續訓練或用於測試數據。 # saver.restore(sess, FLAGS.train_dir)
# restore trained data
with tf.variable_scope("regression"): y1, variables = model.regression(x) saver = tf.train.Saver(variables) saver.restore(sess, "mnist/data/regression.ckpt") # tf.get_variable(<name>, <shape>, <initializer>) 建立或返回給定名稱的變量 # tf.variable_scope(<scope_name>) 管理傳給get_variable()的變量名稱的做用域
with tf.variable_scope("convolutional"): keep_prob = tf.placeholder("float") y2, variables = model.convolutional(x, keep_prob) saver = tf.train.Saver(variables) saver.restore(sess, "mnist/data/convolutional.ckpt") def regression(input): # print('-------------------regression')
# print('y2:' + str(y1))
# print(input)
return sess.run(y1, feed_dict={x: input}).flatten().tolist() # run( # fetches, # feed_dict=None, # options=None, # run_metadata=None # )
def convolutional(input): # print('-------------------convolutional')
# print('y2:' + str(y2))
# print( input)
return sess.run(y2, feed_dict={x: input, keep_prob: 1.0}).flatten().tolist() # im = Image.open(r'C:\Users\admin\Desktop\無標題.png') # im2 = np.array(im) # print(im2)
# img = imread(r'C:\Users\admin\Desktop\無標題.png') # 讀入圖像(設定合適的路徑!) # plt.imshow(img) # plt.arr # plt.show()
# 讀取圖片
im = Image.open(r'C:\Users\admin\Desktop\2.png') # 顯示圖片 # im.show()
im = im.convert("L") # im.show()
data = im.getdata() data = np.matrix(data) # print data # 變換成512*512
data = np.reshape(data, (784, 1)) # new_im = Image.fromarray(data) # # 顯示圖片 # new_im.show()
input = ((255 - np.array(data, dtype=np.uint8)) / 255.0).reshape(1, 784) # # print(input)
output1 = regression(input) output2 = convolutional(input) print(output1) print(output2)
運行後輸出數據:其序號對應值爲識別的數字,值爲機率,有科學計數法顯示數據。
[0.002712834160774946, 0.37007448077201843, 0.38919582962989807, 0.04636502265930176, 2.2569240172742866e-05, 0.12520278990268707, 0.04699072241783142, 0.0002446999424137175, 0.01896093040704727, 0.00023008222342468798](Softmax迴歸模型)
[0.0004617558151949197, 0.02070416323840618, 0.9636037349700928, 0.00868076179176569, 6.441913137678057e-05, 0.003921648487448692, 0.0009535282733850181, 0.0006638980703428388, 0.0006735732895322144, 0.0002723101933952421](卷積神經網絡模型)ide
0.38919582962989807 函數
0.9636037349700928post
成功識別圖片數字爲2測試
相關代碼連接:https://download.csdn.net/download/qq_35554617/10883571fetch