将本地图片数据制作成内存对象数据集|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' ...
随机推荐
- #python# error:urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>
设置代理后访问网页报错,百度有人说地址拼写不对,确认拼写后依然报错 因为使用的是xici免费代理,想到可能代理不可用造成getaddrinfo failed, 更换其他代理,error消失
- jq中的ajax传参
一. jq中的Ajax传参有两种 1.通过url地址来传参 2.通过data来传递参数 1. url来传递参数 function GetQuery(id) { | ...
- 2018-2-13-C#-复制列表
title author date CreateTime categories C# 复制列表 lindexi 2018-2-13 17:23:3 +0800 2018-2-13 17:23:3 +0 ...
- 微信小程序(9)--音频及视频弹幕
记录微信小程序音频及视频弹幕播放效果. 1.audio <!-- audio.wxml --> <audio poster="{{poster}}" name=& ...
- 数据结构 java概况
数据结构可以分为三种结构: 线性结构: 数组:栈:队列:链表:哈希表 树结构: 二叉树,二分搜索树,AVL,红黑树,Treap,Splay,堆,Trie,线段树,K-D树,并查集,哈夫曼树 图结构 邻 ...
- weblogic启动脚本
DATE=`date +%Y%m%d%H%M%S` user=`whoami` logDir=/app/logs/sguap_admin #启动日志存放路径sguap是例子系统简称# logDestd ...
- vscode舒适的字体风格
首选项-->设置-->输入setting.json-->查找到设置文件 添加如下配置 "editor.tabSize": 2, "files.assoc ...
- HTML5知识点总结(一)
最近在复习前端的基础知识,在这里做一个总结,这是HTML5篇. 新特性 取消了过时的显示效果标记<font></font>和<center></center& ...
- Spring---Spring Aware
1.概述 1.1.Spring中的 所有Bean 对Spring容器的存在 是没有意识的(即你可以将容器换成别的容器,这样使用容器与Bean之间的耦合度很低): 但在实际项目中,不可避免的要用到 ...
- shell中的双引号和单引号
参考链接:http://bbs.chinaunix.net/thread-2076396-1-1.html " "(双引号)与 ' '(单引号)的区别 你在shell prompt ...