tensorflow 手写图像验证

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

"""
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 算出模型值
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
TensorFlow是一个强大的开源机器学习库,常用于深度学习项目,包括手写数字识别。手写数字识别是计算机视觉中的一个经典案例,它的目标是从图像中识别出数字,如MNIST数据集中的手写字体。 在TensorFlow中实现手写数字识别通常包括以下步骤: 1. **数据预处理**:加载和处理MNIST数据集,将其分为训练集和测试集,通常是将图像标准化到0-1范围并调整尺寸。 2. **模型构建**:使用卷积神经网络(Convolutional Neural Network, CNN)作为基本架构,因为CNN对图像数据特别有效。可能包含多个卷积层、池化层、全连接层和激活函数(如ReLU)。 3. **编译模型**:设置损失函数(如交叉熵)、优化器(如Adam或SGD)和评估指标(如准确率)。 4. **训练模型**:使用训练集数据对模型进行迭代训练,调整权重以最小化损失。 5. **评估和验证**:在验证集上检查模型性能,防止过拟合。 6. **预测**:用训练好的模型对新的手写数字图片进行预测,并查看预测结果。 7. **可视化结果**:展示一些预测示例,对比真实标签和模型预测。 如果你对具体操作有兴趣,我可以提供一个简化的代码片段来展示如何使用TensorFlow进行手写数字识别: ```python import tensorflow as tf from tensorflow.keras.datasets import mnist # ... (数据预处理) # 创建一个简单的CNN模型 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.MaxPooling2D((2, 2)), tf.keras.layers.Flatten(), tf.keras.layers.Dense(128, activation='relu'), tf.keras.layers.Dropout(0.2), tf.keras.layers.Dense(10, activation='softmax') ]) # 编译模型 model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(train_images, train_labels, epochs=10, validation_data=(test_images, test_labels)) # 预测 predictions = model.predict(test_images) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值