tensorflow 手写图像验证

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_34233802/article/details/69388510

主要是为了讨论图像验证,利用最简单的训练代码。官方示例对验证过程只有简单的准确率输出,不直观。
为此,对单一图片进行验证
训练代码:

"""
Created on Tue Mar 28 11:42:38 2017
https://www.tensorflow.org/get_started/mnist/beginners
@author: chuc
"""

from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
mnist = input_data.read_data_sets("MNIST_data/", one_hot=True)
x = tf.placeholder(tf.float32, [None, 784])           #占位符
W = tf.Variable(tf.zeros([784, 10]))           #生成784*10位数组
b = tf.Variable(tf.zeros([10]))
y = tf.nn.softmax(tf.matmul(x, W) + b)        
y_ = tf.placeholder(tf.float32, [None, 10])
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y), reduction_indices=[1]))
train_step = tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
sess = tf.InteractiveSession()
tf.global_variables_initializer().run()
for _ in range(1000):
  batch_xs, batch_ys = mnist.train.next_batch(100)
  sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys})

correct_prediction = tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
print(sess.run(accuracy, feed_dict={x: mnist.test.images, y_: mnist.test.labels}))
#其他博客有详细的解释说明

spyder运行上述代码后(运行环境anaconda2.4.1-py3.5.1)

验证数据

batch_x, batch_y = mnist.test.next_batch(1)   #取一组训练数据
#batch_x 为(1,784)数组(保存图像信息) batch_y 为(1,10)(保存图像标签,第几位数是1,就表示几)
print(sess.run(accuracy, feed_dict={x: batch_x, y_: batch_y}))  #验证训练数据的准确性
im = np.reshape(batch_x,(28,28))   #将一维数组转化为28*28的图像数组  float32 (0-1)
#此时通过观察数组中数字部分,能大致的看出图像表示的数字
#为了直观的看到,可以将数组转化为图像
from PIL import Image
imag=Image.fromarray(np.uint8(im*255))  #这里读入的数组是 float32 型的,范围是 0-1,而 PIL.Image 数据是 uinit8 型的,范围是0-255,要进行转换
imag.show()
imag.save('E:/phto/7.png')

运行结果如图:
这里写图片描述
保存的为黑底白字,数据集说明为白底黑字,测试自己的图片时看着改改。
如果想测试自己的图片,可以:

imm =np.array(Image.open("E:/phto/t7.png").convert('L')) #打开图片,转化为灰度并转化为数组size(n,m) 值0-255
imm = imm/255           #将值转化为0-1
imm_3 = Image.fromarray(imm)    #转化为图像
imm_4 = imm_3.resize([28,28])   #压缩    
im_array = np.array(imm_4)     #转化为数组
fs = im_array.reshape((1,784))  #转化为符合验证一维的数组
print(sess.run(tf.argmax(y,1), feed_dict={x: fs, y_: batch_y})) #输出模型的识别值 
#或者
imm =np.array(Image.open("E:/phto/t7.png").convert('L').resize([28,28]))
imm = 255-imm  #imm、255  反向处理
imm = imm/255
#imm = -imm+1   #自己测试图片效果太差,示例的数组无字处为0(黑底白字)。可以通过自定义函数转化自己的数组,这里利用的是最简单的 函数
imm = imm.reshape((1,784))
print(sess.run(tf.argmax(y,1), feed_dict={x: imm}))  #tf.argmax 算出模型值

猜你喜欢

转载自blog.csdn.net/sinat_34233802/article/details/69388510