样本说明:

  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. 38.0到n-1中缺失的数字

    题目描述:   一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字的范围都在0到n-1之内.在范围0到n-1内的n个数字中有且仅有一个数字不在该数组中,求出该数字. 思路分析:   因 ...

  2. sql插入语句笔记

    使用INSERT插入数据行 [一次插入一行数据] 全写: INSERT  INTO  renshi  (name, sex, age ,tel) VALUES  ('胡大姐','女','35','13 ...

  3. 记一次用Linux curl命令获取Django url返回值异常的问题

    问题描述: curl 检测 URL 返回值以判断服务器是否正常 原命令:curl -I -m 10 -o /dev/null -s -w %{http_code} --insecure $url 问题 ...

  4. JDBC之Statement、PreparedStatement和CallableStatement

    JDBC提供了Statement.PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用 ...

  5. 【Leetcode周赛】从contest-111开始。(一般是10个contest写一篇文章)

    Contest 111 (题号941-944)(2019年1月19日,补充题解,主要是943题) 链接:https://leetcode.com/contest/weekly-contest-111 ...

  6. 批量定时任务将rtf文件转为docx,入参是rtf文件夹,生成一个docx文件夹

    java,python等语言对于rft的处理很受限,rtf提供了很少的api供外部调用处理,但是对于docx我们却又很多api来处理,所以很多人会有需求将rtf批量转为docx的需求,接下来就来说说解 ...

  7. 前端每日实战:53# 视频演示如何用纯 CSS 创作一个文本淡入淡出的 loader 动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ERwpeG 可交互视频 此视频是可 ...

  8. js中数组Array 详解

    unshift:将参数添加到原数组开头,并返回数组的长度    pop:删除原数组最后一项,并返回删除元素的值:如果数组为空则返回undefined    push:将参数添加到原数组末尾,并返回数组 ...

  9. 一张图理解"Figure", "Axes", "Axis"

    Figure is the object with the highest level in the hierarchy. It corresponds to the entire graphical ...

  10. JS中关于引用类型数据及函数的参数传递

    (JavaScript 中,函数的参数传递方式都是按值传递,没有按引用传递的参数) 一.数据类型 在 javascript 中数据类型可以分为两类: 基本类型值 primitive type,比如Un ...