将本地图片数据制作成内存对象数据集|tensorflow|手写数字制作成内存对象数据集|tf队列|线程
样本说明:
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队列|线程的更多相关文章
- Python手写模拟单向链表对象,栈对象和树
单向链表: class error(Exception): def __init__(self,msg): super(error,self).__init__() self.msg=msg def ...
- JavaScript实现本地图片上传预览功能(兼容IE、chrome、FF)
需要解决的问题有:本地图片如何在上传前预览.编辑:最近发现这个功能很多是基于flash实现的,很多JavaScript实现的代码兼容性都很差,特别是在IE和firefox和chrome三个浏览器上不兼 ...
- 【C#】人脸识别 视频数据转图片数据
使用虹软人脸识别的开发过程中遇到了转换的问题 因为不会用C#直接打开摄像头,就只能用第三方dll.一开始用Aforge,后来发现有个问题,关闭摄像头老是陷入等待,所以抛弃了.前一阵子开始用封装了Ope ...
- 利用cropper插件裁剪本地图片,然后将裁剪过后的base64图片上传至七牛云空间
现在做的项目需要做一些图片处理,由于时间赶急,之前我便没有处理图片,直接将图片放在input[type=file]里面,以文件的形式提交给后台,这样做简直就是最低级的做法,之后各种问题便出来了,人物头 ...
- (第二章第二部分)TensorFlow框架之读取图片数据
系列博客链接: (第二章第一部分)TensorFlow框架之文件读取流程:https://www.cnblogs.com/kongweisi/p/11050302.html 本文概述: 目标 说明图片 ...
- Java对网络图片/本地图片转换成Base64编码和解码
一.将本地图片转换成Base64编码字符串 /** * 将本地图片转换成Base64编码字符串 * * @param imgFile 图片目录路径 * @return */ public static ...
- base64格式的图片数据如何转成图片
base64格式的图片数据如何转成图片 一.总结 一句话总结:不仅要去掉前面的格式串,还需要base64_decode()解码才行. // $base_img是获取到前端传递的值 $base_img ...
- python2/3中 将base64数据写成图片,并将图片数据转为16进制数据的方法、bytes/string的区别
1.python2将base64数据写成图片,并将数据转为16进制字符串的方法 import binascii img = u'R0lGODlhagAeAIcAAAAAAAAARAAAiAAAzABE ...
- 使用nodejs+http(s)+events+cheerio+iconv-lite爬取2717网站图片数据到本地文件夹
源代码如下: //(node:9240) Warning: Setting the NODE_TLS_REJECT_UNAUTHORIZED environment variable to '0' ...
随机推荐
- Java并发编程:线程的同步
Java并发编程:线程的同步 */--> code {color: #FF0000} pre.src {background-color: #002b36; color: #839496;} J ...
- 并行开发 2.task
原文:8天玩转并行开发——第二天 Task的使用 在我们了解Task之前,如果我们要使用多核的功能可能就会自己来开线程,然而这种线程模型在.net 4.0之后被一种称为基于 “任务的编程模型”所冲击, ...
- ES5继承模式
果然,感觉有些东西不整理一下还是很容易忘记的,很多时候有需要不断地去复习,感觉JavaScript这门语言总体上不能算是特别难,但是知识点特别杂(坑也特别多...),感觉最好还是能够梳理出一个整体架构 ...
- JavaScript中正则使用
字符串是编程时涉及到的最多的一种数据结构,对字符串进行操作的需求几乎无处不在.比如判断一个字符串是否是合法的Email地址,虽然可以编程提取@前后的子串,再分别判断是否是单词和域名,但这样做不但麻烦, ...
- Linux就该这么学07学习笔记
参考链接:https://www.linuxprobe.com/chapter-07.html RAID磁盘冗余阵列 RAID 0 RAID 0技术把多块物理硬盘设备(至少两块)通过硬件或软件的方式串 ...
- Linux数据库还原备份
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDBHotbackup的一个很好的替代品. https://www.percon ...
- SpringBoot中jar包转war包
参考博客 https://blog.csdn.net/qq_33689414/article/details/81812761 https://blog.csdn.net/u013412772/art ...
- Mybatis-Generator demo
使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件(转) https://www.cnblogs.com/smileberry/p/4145872.html == ...
- 获取配置文件yml的@ConfigurationProperties和@Value的区别
首先,配置文件的事,我没讲properties,这个写中文的时候,会有乱码,需要去Idea里面设置一下编码格式为UTF-8 还有,我们的类和配置文件直接关联,我用的是ConfigurationProp ...
- JSOI2018冬令营游记&总结(迁移自洛谷博客)
游记 一开始在冬令营还没开始的时候,十分期待,殊不知每天都有一场浩劫在等着我. Day0 10:50出发,看见lbn同学发了一条说说,也随便发了一个. 然后在车上一直在睡觉,现在感觉挺后悔的,其实可以 ...