怎么用TensorFlow训练和识别/分类自定义图片

  介绍

小编给大家分享一下怎么用TensorFlow训练和识别/分类自定义图片,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

很多正在入门或刚入门TensorFlow机器学习的同学希望能够通过自己指定图片源对模型进行训练,然后识别和分类自己指定的图片。但是,在TensorFlow官方入门教程中,并无明确给出如何把自定义数据输入训练模型的方法。现在,我们就参考官方入门课程《深MNIST专家》一节的内容(传送门:https://www.tensorflow.org/get_started/mnist/pros),介绍如何将自定义图片输入到TensorFlow的训练模型。

在《深MNISTfor专家》一节的代码中,程序将TensorFlow自带的MNIST图片数据集mnist.train.images作为训练输入,将mnist.test。图像作为验证输入。当学习了该节内容后,我们会惊叹卷积神经网络的超高识别率,但对于刚开始学习TensorFlow的同学,内心可能会产生一个问号:如何将mnist数据集替换为自己指定的图片源?譬如,我要将图片源改为自己C盘里面的图片,应该怎么调整代码?

我们先看下该节课程中涉及到mnist图片调用的代码:

得到tensorflow.examples.tutorials.mnist  import  input_data   时间=mnist  input_data.read_data_sets (& # 39; MNIST_data& # 39;,, one_hot=True)   时间=batch  mnist.train.next_batch (50)   train_accuracy =, accuracy.eval (feed_dict={x:批处理[0],y_:,批处理[1],keep_prob:, 1.0})   train_step.run (feed_dict={x:批处理[0],y_:,批处理[1],keep_prob:, 0.5})   打印(& # 39;test  accuracy  %舌鳎# 39;,%,accuracy.eval (feed_dict={x: mnist.test.images,, y_:, mnist.test.labels,, keep_prob:, 1.0}))

对于刚接触TensorFlow的同学,要修改上述代码,可能会较为吃力。我也是经过一番摸索,才成功调用自己的图片集。

要实现输入自定义图片,需要自己先准备好一套图片集。为节省时间,我们把mnist的手写体数字集一张一张地解析出来,存放到自己的本地硬盘,保存为bmp格式,然后再把本地硬盘的手写体图片一张一张地读取出来,组成集合,再输入神经网络.mnist手写体数字集的提取方式详见《如何从TensorFlow的mnist数据集导出手写体数字图片》。

将mnist手写体数字集导出图片到本地后,就可以仿照以python下代码,实现自定义图片的训练:

# !/usr/bin/python3.5   #,- *安康;编码:,utf-8  - *安康;   ,   import 操作系统   ,   import  numpy  as  np   import  tensorflow  as  tf   ,   得到PIL  import 形象   ,   ,   #,第一次遍历图片目录是为了获取图片总数   input_count =0   for 小姐:拷贝范围(0,10):   时间=dir 才能;& # 39;。/custom_images/% s/& # 39;, %,小姐:,,,,,,,,#,这里可以改成你自己的图片目录,我为分类标签   for 才能;rt, dirs,, files 拷贝os.walk (dir):   ,,,for  filename 拷贝文件:   ,,,,,input_count  +=1   ,   #,定义对应维数和各维长度的数组   时间=input_images  np.array ([[0] * 784, for 小姐:拷贝范围(input_count)])   时间=input_labels  np.array ([[0] * 10, for 小姐:拷贝范围(input_count)])   ,   #,第二次遍历图片目录是为了生成图片数据和标签   index =0   for 小姐:拷贝范围(0,10):   时间=dir 才能;& # 39;。/custom_images/% s/& # 39;, %,小姐:,,,,,,,,#,这里可以改成你自己的图片目录,我为分类标签   for 才能;rt, dirs,, files 拷贝os.walk (dir):   ,,,for  filename 拷贝文件:   ,,,,,filename =, dir  +文件名   ,,,,,img =, Image.open(文件名)   ,,,,,width =, img.size [0]   ,,,,,height =, img.size [1]   ,,,,,for  h 拷贝范围(0,高度):   ,,,,,,,for  w 拷贝范围(0,宽度):   ,,,,,,,,,#,通过这样的处理,使数字的线条变细,有利于提高识别准确率   ,,,,,,,,,if  img.getpixel ((w, h)),祝辞,230:   ,,,,,,,,,,,input_images(指数)(w + h *宽度),=0   ,,,,,,,,,其他的:   ,,,,,,,,,,,input_images(指数)(w + h *宽度),=,1   ,,,,,input_labels(指数)[我],=,1   ,,,,,index  +=1   ,   ,   #,定义输入节点,对应于图片像素值矩阵集合和图片标签(即所代表的数字)   时间=x  tf.placeholder (tf.float32,形状=[,,784])   y_ =, tf.placeholder (tf.float32,形状=[没有,,10])   ,   x_image =, tf.reshape (x,,(1), 28日,28日,1])   ,   #,定义第一个卷积层和运维的变量   时间=W_conv1  tf.Variable (tf.truncated_normal ([7,, 7,, 1,, 32),, stddev=0.1))   时间=b_conv1  tf.Variable (tf.constant(0.1,,形状=[32]))   ,   L1_conv =, tf.nn.conv2d (x_image, W_conv1,,进步=[1,1,1,1),,填充=& # 39;同样,)   时间=L1_relu  tf.nn.relu (L1_conv  +, b_conv1)   时间=L1_pool  tf.nn.max_pool (L1_relu, ksize=[1,, 2,, 2,, 1],,进步=[1,,2,,2,,1],,填充=& # 39;同样,)   ,   #,定义第二个卷积层和运维的变量   时间=W_conv2  tf.Variable (tf.truncated_normal([3,, 3,, 32岁,64年),,stddev=0.1))   时间=b_conv2  tf.Variable (tf.constant(0.1,,形状=[64]))   ,   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么用TensorFlow训练和识别/分类自定义图片