样本说明:

  tensorflow经典实例之手写数字识别。MNIST数据集。

数据集dir名称

每个文件夹代表一个标签label,每个label中有820个手写数字的图片

标签label为0的文件夹中部分bmp图片示例

import tensorflow as tf
import os
from matplotlib import pyplot as plt
import numpy as np
from sklearn.utils import shuffle

相关模块

def load_sample(sample_dir):
'''
9个标签(label)对应9*820个图片,这一步将每个图片的相对路径及图片名称制作成列表 每个推按对应的标签label制作成列表
:param sample_dir: mnist_digits_images
:return: 文件名称列表 标签列表
'''
print ('正在导入样本数据..')
lfilenames = [] ###用于接收每个图片名称的空列表
labelsnames = [] ###用于接收每个图片对应的标签label的空列表
for (dirpath, dirnames, filenames) in os.walk(sample_dir):#递归遍历文件夹
'''os.walk的运行规则,自行补充'''
for filename in filenames: #遍历所有文件名
filename_path = os.sep.join([dirpath, filename])
lfilenames.append(filename_path) #添加文件名
labelsnames.append( dirpath.split('\\')[-1] )#添加文件名对应的标签
###此时得到的标签列表是字符串类型的,下面将字符串列表转换成数字列表
lab= list(sorted(set(labelsnames))) #标签列表去重,set有去重功能,sorted对set排序
labdict=dict( zip( lab ,list(range(len(lab))) )) #生成字典:字符串{'0':0,'1':1,'2':2,......}
labels = [labdict[i] for i in labelsnames] ##通过列表解析,将字符串标签转换成数字标签
##将列表转换成数组,并且使用shuffle乱序数组,统一个shullfe下,各个列表乱序的规则一致,所以图片标签一一对应的关系不变
return shuffle(np.asarray( lfilenames),np.asarray( labels)),np.asarray(lab)

文件名称数组(列表) 和 标签数组(列表)

def get_batches(image,label,input_w,input_h,channels,batch_size):
##在会话启动队列之后,进行入队和出队操作。出队一个数据,为queue=[image,label],image:图片名称(相对路径) label :标签
queue = tf.train.slice_input_producer([image,label]) #使用tf.train.slice_input_producer实现一个输入的队列(准备,此时并没有数据入队) label = queue[1] #从输入队列里读取标签 image_c = tf.read_file(queue[0]) #从输入队列里读取image路径【读取图片】 image = tf.image.decode_bmp(image_c,channels) #将读取的图片解码 image = tf.image.resize_image_with_crop_or_pad(image,input_w,input_h) #修改图片大小 image = tf.image.per_image_standardization(image) #图像标准化处理,(x - mean) / adjusted_stddev image_batch,label_batch = tf.train.batch([image,label],#调用tf.train.batch函数生成批次数据
batch_size = batch_size,
num_threads = 64) images_batch = tf.cast(image_batch,tf.float32) #将数据类型转换为float32 labels_batch = tf.reshape(label_batch,[batch_size])#修改标签的形状shape
return images_batch,labels_batch

通过队列读取图片并对图片进行处理---生成批次数据

data_dir = 'mnist_digits_images\\'  #定义文件路径

(image,label),labelsnames = load_sample(data_dir)   #载入文件名称与标签
batch_size = 16        ##定义批次大小
image_batches,label_batches = get_batches(image,label,28,28,1,batch_size) ##读取图片,预处理,生成批次
with tf.Session() as sess:
'''会话初始化'''
init = tf.global_variables_initializer()
sess.run(init)
'''创建队列协调器,在get_batches函数中定义了tf.train.slice_input_producer输入队列,创建协调器,并启动队列就可以用队列调用数据了'''
coord = tf.train.Coordinator()
###启动队列线程
threads = tf.train.start_queue_runners(sess=sess,coord=coord)
try:
for step in np.arange(5): ##定义迭代次数:每迭代一次,一个批次的数据注入
###查看队列是否开启(队列关闭返回True,开启返回False),如果关闭,终止程序 if coord.should_stop(): break
##获取批次数据输入(注入数据)
images,labels = sess.run([image_batches,label_batches])
print('一个批次图片(数量)',len(images))
print('一个批次标签', labels)
except tf.errors.OutOfRangeError:
print('完成,现在开始终止所有线程')
finally:
coord.request_stop()
print('所有线程请求终止')
coord.join(threads)
print('所有线程终止') '''
输出结果:
一个批次图片(数量) 16
一个批次标签 [1 1 6 5 8 1 7 5 1 8 5 6 4 5 9 7]
一个批次图片(数量) 16
一个批次标签 [9 7 2 3 6 7 1 1 8 0 3 4 7 7 7 9]
一个批次图片(数量) 16
一个批次标签 [6 2 7 9 0 5 3 9 5 0 4 1 3 3 2 6]
一个批次图片(数量) 16
一个批次标签 [3 1 9 7 9 0 9 1 7 3 9 8 9 4 1 9]
一个批次图片(数量) 16
一个批次标签 [0 2 3 3 9 8 7 9 9 9 8 6 1 6 9 1]
所有线程请求终止
所有线程终止
'''

将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程的更多相关文章

  1. Python手写模拟单向链表对象,栈对象和树

    单向链表: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def ...

  2. JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)

    需要解决的问题有:本地图片如何在上传前预览.编辑:最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼 ...

  3. 【C#】人脸识别 视频数据转图片数据

    使用虹软人脸识别的开发过程中遇到了转换的问题 因为不会用C#直接打开摄像头,就只能用第三方dll.一开始用Aforge,后来发现有个问题,关闭摄像头老是陷入等待,所以抛弃了.前一阵子开始用封装了Ope ...

  4. 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间

    现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...

  5. (第二章第二部分)TensorFlow框架之读取图片数据

    系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...

  6. Java对网络图片/本地图片转换成Base64编码和解码

    一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...

  7. base64格式的图片数据如何转成图片

    base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...

  8. python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别

    1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...

  9. 使用nodejs+http(s)+events+cheerio+iconv-lite爬取2717网站图片数据到本地文件夹

    源代码如下:   //(node:9240) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' ...

随机推荐

  1. P4036 [JSOI2008]火星人(splay+hash+二分)

    P4036 [JSOI2008]火星人 Splay维护hash,查询二分 $a[x].vl=a[lc].vl*ha[a[rc].sz+1]+a[x].w*ha[a[rc].sz]+a[rc].vl$ ...

  2. 2018-7-24-WPF-渲染级别

    title author date CreateTime categories WPF 渲染级别 lindexi 2018-07-24 18:46:27 +0800 2018-04-20 16:26: ...

  3. Nginx学习总结:proxy与rewrite模块(三)

    斜体下划线,表示建议采用默认配置,无需显式的配置 一.ngx_http_upstream_module 此模块中可配置的指令并不是很多.nginx的负载均衡算法包括: 1)round-robin:轮询 ...

  4. docker运行模式图

    docker运行模式图:

  5. Codeforces Round #393 (Div. 2) - C

    题目链接:http://codeforces.com/contest/760/problem/C 题意:有n个烤串,并且每个烤串起初都放在一个火盆上并且烤串都正面朝上,现在定义p序列,p[i]表示在i ...

  6. cookie和session的联系与区别

    Cookie 当你在浏览网站时,WEB服务器会先送一小小的资料放在你的计算机上,Cookie会帮你在网站上所打的文字或是一些选择都记录下来.当你下次再光临同一个网站时,WEB服务器会先看看有没有它上次 ...

  7. lik模糊e查询语句,索引使用效果详解

    一.like查询与索引 在oracle里的一个超级大的表中,我们的where条件的列有建索引的话,会走索引唯一扫描INDEX UNIQUE SCAN.如select * from table wher ...

  8. Java的GC机制及算法

    GC的阶段  对每个对象而言,垃圾回收分为两个阶段:finalization和reclamation.  finalization: 指运行这个对象的finalize的方法. reclamation: ...

  9. bzoj1190 [HNOI2007]梦幻岛宝珠 背包

    题目 https://lydsy.com/JudgeOnline/problem.php?id=1190 题解 好神仙的一道题啊. 既然 \(w_i = a_i\cdot 2^{b_i}\),那么不妨 ...

  10. jsonp跨域获取数据实现百度搜索

    本菜鸡最近在写某个页面请求数据时,报了如下的错误. Failed to load https://...:No 'Access-Control-Allow-Origin' header is pres ...