使用MINST数据集训练模型生成loss和准确率趋势图后,使用模型文件推理(附代码和MINST数据集和推理手写图片)

使用训练脚本训练后保存模型文件并生成loss和准确率趋势图保存图片

使用MINST数据集训练模型生成loss和准确率趋势图后,使用模型文件推理(附代码和MINST数据集和推理手写图片)_第1张图片

训练代码如下

#coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets("MNIST_data", one_hot=True)

input_x = tf.placeholder(tf.float32, [None, 28*28])/255  
output_y = tf.placeholder(tf.int32, [None, 10])   
input_x_images = tf.reshape(input_x, [-1, 28, 28, 1])
#获取数据
test_x = mnist.test.images[:3000]  
test_y = mnist.test.labels[:3000]  
#构建网络
conv1 = tf.layers.conv2d(inputs=input_x_images, 
                         filters=32,
                         kernel_size=[5, 5],
                         strides=1,
                         padding='same',
                         activation=tf.nn.relu
                         )
pool1 = tf.layers.max_pooling2d(
    inputs=conv1,
    pool_size=[2,2],
    strides=2
)

conv2 = tf.layers.conv2d(inputs=pool1,
                         filters=64,
                         kernel_size=[5, 5],
                         strides=1,
                         padding='same',
                         activation=tf.nn.relu
                         )

pool2 = tf.layers.max_pooling2d(
    inputs=conv2,
    pool_size=[2,2],
    strides=2
)

flat = tf.reshape(pool2, [-1, 7 * 7 * 64])

dense = tf.layers.dense(inputs=flat, units=1024, activation=tf.nn.relu)

dropout = tf.layers.dropout(inputs=dense, rate=0.5)

logits = tf.layers.dense(inputs=dropout, units=10)

loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y, logits=logits)

train_op = tf.train.AdamOptimizer(learning_rate=0.005).minimize(loss)

accuracy = tf.metrics.accuracy(
    labels=tf.argmax(output_y, axis=1),
    predictions=tf.argmax(logits, axis=1),)[1]

with tf.Session() as sess:
    init = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
    sess.run(init)

#初始化
    x= []
    x2=[]
    y1=[]
    y2=[]
    saver = tf.train.Saver()
#迭代
    for i in range(20000):
        batch = mnist.train.next_batch(50)
        train_loss, train_op_ = sess.run([loss, train_op], {input_x: batch[0], output_y: batch[1]})
        if i % 100 == 0:
            test_accuracy = sess.run(accuracy, {input_x: test_x, output_y: test_y})
            print("Step=%d, Train loss=%.4f, [Test accuracy=%.2f]" % (i, train_loss, test_accuracy))
#画趋势图
            plt.cla()
            x.append(i)
            y1.append(train_loss)            
            y2.append(test_accuracy)           
            plt.plot(x, y1, label='Loss rate', color='g')
            plt.plot(x, y2, label='Accuracy rate', color='b')  
            plt.xlabel('Step')
            plt.ylabel('Rate')
            plt.title('Train table')
            plt.legend()   
            plt.pause(1.0) 
#保存趋势图           
    plt.savefig("./RATE.png")   
#保存模型文件
    saver.save(sess, './model.ckpt')

使用生成的模型对手写图片识别

使用MINST数据集训练模型生成loss和准确率趋势图后,使用模型文件推理(附代码和MINST数据集和推理手写图片)_第2张图片

使用MINST数据集训练模型生成loss和准确率趋势图后,使用模型文件推理(附代码和MINST数据集和推理手写图片)_第3张图片

 推理代码如下

#coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data

from PIL import Image, ImageFilter
import tensorflow as tf
import matplotlib.pyplot as plt

def imageprepare(i): 
    im = Image.open('./mnistpic/mnist_test_'+ str(i) +'.png') #读取的图片所在路径,注意是28*28像素
    im = im.convert('L')
    im.show()
    tv = list(im.getdata()) 
    return tv


#构造相同网络
input_x = tf.placeholder(tf.float32, [None, 28*28])/255  
output_y = tf.placeholder(tf.int32, [None, 10])   
input_x_images = tf.reshape(input_x, [-1, 28, 28, 1])


conv1 = tf.layers.conv2d(inputs=input_x_images, 
                         filters=32,
                         kernel_size=[5, 5],
                         strides=1,
                         padding='same',
                         activation=tf.nn.relu
                         )
pool1 = tf.layers.max_pooling2d(
    inputs=conv1,
    pool_size=[2,2],
    strides=2
)

conv2 = tf.layers.conv2d(inputs=pool1,
                         filters=64,
                         kernel_size=[5, 5],
                         strides=1,
                         padding='same',
                         activation=tf.nn.relu
                         )

pool2 = tf.layers.max_pooling2d(
    inputs=conv2,
    pool_size=[2,2],
    strides=2
)

flat = tf.reshape(pool2, [-1, 7 * 7 * 64])

dense = tf.layers.dense(inputs=flat, units=1024, activation=tf.nn.relu)

dropout = tf.layers.dropout(inputs=dense, rate=0.5)

logits = tf.layers.dense(inputs=dropout, units=10)

loss = tf.losses.softmax_cross_entropy(onehot_labels=output_y, logits=logits)

train_op = tf.train.AdamOptimizer(learning_rate=0.005).minimize(loss)

accuracy = tf.metrics.accuracy(
    labels=tf.argmax(output_y, axis=1),
    predictions=tf.argmax(logits, axis=1),)[1]
#推理
saver = tf.train.Saver()
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    saver.restore(sess, "./model.ckpt") #使用原先生成的模型
    for i in range(0,10):
        result=imageprepare(i)
        predictions=tf.argmax(logits, axis=1)
        predint=predictions.eval(feed_dict={input_x: [result]}, session=sess)
        print('识别结果:')
        print(predint[0])

 

你可能感兴趣的:(人工智能,MINST)