@qidiandasheng 2018-06-27T09:33:28.000000Z 字数 5848 阅读 1681

# Tensorflow MNIST入门

机器学习

## 代码

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 file    file is stored in the same directory as this python script is started    Use the model to predict the integer. Integer is returend as list.    Based on the documentatoin at    https://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 pixels    if 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 width        if (nheigth == 0): #rare case but minimum is 1 pixel            nheigth = 1          # resize and sharpen        img = im.resize((20,nheight), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)        wtop = int(round(((28 - nheight)/2),0)) #caculate horizontal pozition        newImage.paste(img, (4, wtop)) #paste resized image on white canvas    else:        #Height is bigger. Heigth becomes 20 pixels.         nwidth = int(round((20.0/height*width),0)) #resize width according to ratio height        if (nwidth == 0): #rare case but minimum is 1 pixel            nwidth = 1         # resize and sharpen        img = im.resize((nwidth,20), Image.ANTIALIAS).filter(ImageFilter.SHARPEN)        wleft = int(round(((28 - nwidth)/2),0)) #caculate vertical pozition        newImage.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])

• 私有
• 公开
• 删除