@qidiandasheng
2018-06-27T09:33:28.000000Z
字数 5848
阅读 2098
机器学习
训练模型并导出.pb文件:
import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data#import datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)sess = tf.InteractiveSession()# Create the modelx = tf.placeholder(tf.float32, [None, 784])y_ = tf.placeholder(tf.float32, [None, 10])W = tf.Variable(tf.zeros([784, 10]))b = tf.Variable(tf.zeros([10]))y = tf.nn.softmax(tf.matmul(x, W) + b)def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],strides=[1, 2, 2, 1], padding='SAME')W_conv1 = weight_variable([5, 5, 1, 32])b_conv1 = bias_variable([32])x_image = tf.reshape(x, [-1,28,28,1])h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)h_pool1 = max_pool_2x2(h_conv1)W_conv2 = weight_variable([5, 5, 32, 64])b_conv2 = bias_variable([64])h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)h_pool2 = max_pool_2x2(h_conv2)W_fc1 = weight_variable([7 * 7 * 64, 1024])b_fc1 = bias_variable([1024])h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)keep_prob = tf.placeholder(tf.float32)h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)W_fc2 = weight_variable([1024, 10])b_fc2 = bias_variable([10])y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)# Define loss and optimizercross_entropy = -tf.reduce_sum(y_*tf.log(y_conv))train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1))accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))"""Train the model and save the model to disk as a model2.ckpt filefile is stored in the same directory as this python script is startedBased on the documentatoin athttps://www.tensorflow.org/versions/master/how_tos/variables/index.html"""saver = tf.train.Saver()sess.run(tf.global_variables_initializer())#with tf.Session() as sess:#sess.run(init_op)for i in range(20000):batch = mnist.train.next_batch(50)if i%100 == 0:train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0})print("step %d, training accuracy %g"%(i, train_accuracy))train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5})save_path = saver.save(sess, "./model2.ckpt")tf.train.write_graph(sess.graph_def, '', 'graph.pb')print ("Model saved in file: ", save_path)print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0}))
识别图片:
import sysimport tensorflow as tffrom PIL import Image, ImageFilterdef predictint(imvalue):"""This function returns the predicted integer.The imput is the pixel values from the imageprepare() function."""# Define the model (same as when creating the model file)x = tf.placeholder(tf.float32, [None, 784])W = tf.Variable(tf.zeros([784, 10]))b = tf.Variable(tf.zeros([10]))def weight_variable(shape):initial = tf.truncated_normal(shape, stddev=0.1)return tf.Variable(initial)def bias_variable(shape):initial = tf.constant(0.1, shape=shape)return tf.Variable(initial)def conv2d(x, W):return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')def max_pool_2x2(x):return tf.nn.max_pool(x, ksize=[1, 2, 2, 1], strides=[1, 2, 2, 1], padding='SAME')W_conv1 = weight_variable([5, 5, 1, 32])b_conv1 = bias_variable([32])x_image = tf.reshape(x, [-1,28,28,1])h_conv1 = tf.nn.relu(conv2d(x_image, W_conv1) + b_conv1)h_pool1 = max_pool_2x2(h_conv1)W_conv2 = weight_variable([5, 5, 32, 64])b_conv2 = bias_variable([64])h_conv2 = tf.nn.relu(conv2d(h_pool1, W_conv2) + b_conv2)h_pool2 = max_pool_2x2(h_conv2)W_fc1 = weight_variable([7 * 7 * 64, 1024])b_fc1 = bias_variable([1024])h_pool2_flat = tf.reshape(h_pool2, [-1, 7*7*64])h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat, W_fc1) + b_fc1)keep_prob = tf.placeholder(tf.float32)h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)W_fc2 = weight_variable([1024, 10])b_fc2 = bias_variable([10])y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)init_op = tf.global_variables_initializer()saver = tf.train.Saver()"""Load the model2.ckpt filefile is stored in the same directory as this python script is startedUse the model to predict the integer. Integer is returend as list.Based on the documentatoin athttps://www.tensorflow.org/versions/master/how_tos/variables/index.html"""with tf.Session() as sess:sess.run(init_op)saver.restore(sess, "model2.ckpt")#print ("Model restored.")prediction=tf.argmax(y_conv,1)return prediction.eval(feed_dict={x: [imvalue],keep_prob: 1.0}, session=sess)def imageprepare(argv):"""This function returns the pixel values.The imput is a png file location."""im = Image.open(argv).convert('L')width = float(im.size[0])height = float(im.size[1])newImage = Image.new('L', (28, 28), (255)) #creates white canvas of 28x28 pixelsif width > height: #check which dimension is bigger#Width is bigger. Width becomes 20 pixels.nheight = int(round((20.0/width*height),0)) #resize height according to ratio widthif (nheigth == 0): #rare case but minimum is 1 pixelnheigth = 1# resize and sharpenimg = im.resize((20,nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)wtop = int(round(((28 - nheight)/2),0)) #caculate horizontal pozitionnewImage.paste(img, (4, wtop)) #paste resized image on white canvaselse:#Height is bigger. Heigth becomes 20 pixels.nwidth = int(round((20.0/height*width),0)) #resize width according to ratio heightif (nwidth == 0): #rare case but minimum is 1 pixelnwidth = 1# resize and sharpenimg = im.resize((nwidth,20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)wleft = int(round(((28 - nwidth)/2),0)) #caculate vertical pozitionnewImage.paste(img, (wleft, 4)) #paste resized image on white canvas#newImage.save("sample.png")tv = list(newImage.getdata()) #get pixel values#normalize pixels to 0 and 1. 0 is pure white, 1 is pure black.tva = [ (255-x)*1.0/255.0 for x in tv]return tva#print(tva)def main(argv):"""Main function."""imvalue = imageprepare(argv)predint = predictint(imvalue)print (predint[0]) #first value in listif __name__ == "__main__":main(sys.argv[1])
mnist 源码
mnist 源码解析
深度学习 - Tensorflow on iOS 入门 + MNIST
机器学习Tensorflow笔记1:Hello World到MNIST实验
机器学习Tensorflow笔记2:超详细剖析MNIST实验
MNIST机器学习入门
写给初学者的深度学习教程之 MNIST 数字识别
tensorflow-mnist-predict