基于Tensorflow下的批量数据的输入处理:
1.Tensor TFrecords格式
2.h5py的库的数组方法
在tensorflow的框架下写CNN代码,我在书写过程中,感觉不是框架内容难写, 更多的是我在对图像的预处理和输入这部分花了很多精神。
使用了两种方法:
方法一:
Tensor 以Tfrecords的格式存储数据,如果对数据进行标签,可以同时做到数据打标签。
①创建TFrecords文件
orig_image = '/home/images/train_image/' gen_image = '/home/images/image_train.tfrecords' def create_record(): writer = tf.python_io.TFRecordWriter(gen_image) class_path = orig_image for img_name in os.listdir(class_path): #读取每一幅图像 img_path = class_path + img_name img = Image.open(img_path) #读取图像 #img = img.resize((256, 256)) #设置图片大小, 在这里可以对图像进行处理 img_raw = img.tobytes() #将图片转化为原声bytes example = tf.train.Example( features=tf.train.Features(feature={ 'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[0])), #打标签 'img_raw': tf.train.Feature(bytes_list=tf.train.BytesList(value=[img_raw]))#存储数据 })) writer.write(example.SerializeToString()) writer.close()
②读取TFrecords文件
def read_and_decode(filename): #创建文件队列,不限读取的数据 filename_queue = tf.train.string_input_producer([filename]) reader = tf.TFRecordReader() _, serialized_example = reader.read(filename_queue) features = tf.parse_single_example( serialized_example, features={ 'label': tf.FixedLenFeature([], tf.int64), 'img_raw': tf.FixedLenFeature([], tf.string)}) label = features['label'] img = features['img_raw'] img = tf.decode_raw(img, tf.uint8) #tf.float32 img = tf.image.convert_image_dtype(img, dtype=tf.float32) img = tf.reshape(img, [256, 256, 1]) label = tf.cast(label, tf.int32) return img, label
③批量读取数据,使用tf.train.batch
min_after_dequeue = 10000 capacity = min_after_dequeue + 3 * batch_size num_samples= len(os.listdir(orig_image)) create_record() img, label = read_and_decode(gen_image) total_batch = int(num_samples/batch_size) image_batch, label_batch = tf.train.batch([img, label], batch_size=batch_size, num_threads=32, capacity=capacity) init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer()) with tf.Session() as sess: sess.run(init_op) coord = tf.train.Coordinator() threads = tf.train.start_queue_runners(coord=coord) for i in range(total_batch): cur_image_batch, cur_label_batch = sess.run([image_batch, label_batch]) coord.request_stop() coord.join(threads)
方法二:
使用h5py就是使用数组的格式来存储数据
这个方法比较好,在CNN的过程中,会使用到多个数据类存储,比较好用, 比如一个数据进行了两种以上的变化,并且分类存储,我认为这个方法会比较好用。
import os import h5py import matplotlib.pyplot as plt import numpy as np import random from scipy.interpolate import griddata from skimage import img_as_float import matplotlib.pyplot as plt os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' class_path = '/home/awen/Juanjuan/Python Project/train_BSDS/test_gray_0_1/' for img_name in os.listdir(class_path): img_path = class_path + img_name img = io.imread(img_path) m1 = img_as_float(img) m2, m3 = sample_inter1(m1) #一个数据处理的函数 m1 = m1.reshape([256, 256, 1]) m2 = m2.reshape([256, 256, 1]) m3 = m3.reshape([256, 256, 1]) orig_image.append(m1) sample_near.append(m2) sample_line.append(m3) arrorig_image = np.asarray(orig_image) # [?, 256, 256, 1] arrlsample_near = np.asarray(sample_near) # [?, 256, 256, 1] arrlsample_line = np.asarray(sample_line) # [?, 256, 256, 1] save_path = '/home/awen/Juanjuan/Python Project/train_BSDS/test_sample/train.h5' def make_data(path): with h5py.File(save_path, 'w') as hf: hf.create_dataset('orig_image', data=arrorig_image) hf.create_dataset('sample_near', data=arrlsample_near) hf.create_dataset('sample_line', data=arrlsample_line) def read_data(path): with h5py.File(path, 'r') as hf: orig_image = np.array(hf.get('orig_image')) #一定要对清楚上边的标签名orig_image; sample_near = np.array(hf.get('sample_near')) sample_line = np.array(hf.get('sample_line')) return orig_image, sample_near, sample_line make_data(save_path) orig_image1, sample_near1, sample_line1 = read_data(save_path) total_number = len(orig_image1) batch_size = 20 batch_index = total_number/batch_size for i in range(batch_index): batch_orig = orig_image1[i*batch_size:(i+1)*batch_size] batch_sample_near = sample_near1[i*batch_size:(i+1)*batch_size] batch_sample_line = sample_line1[i*batch_size:(i+1)*batch_size]
在使用h5py的时候,生成的文件巨大的时候,读取数据显示错误:ioerror: unable to open file (bad object header version number)
基本就是这个生成的文件不能使用,适当的减少存储的数据,即可。
以上这篇基于Tensorflow批量数据的输入实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
Tensorflow,数据,输入
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 明达年度发烧碟MasterSuperiorAudiophile2021[DSF]
- 英文DJ 《致命的温柔》24K德国HD金碟DTS 2CD[WAV+分轨][1.7G]
- 张学友1997《不老的传说》宝丽金首版 [WAV+CUE][971M]
- 张韶涵2024 《不负韶华》开盘母带[低速原抓WAV+CUE][1.1G]
- lol全球总决赛lcs三号种子是谁 S14全球总决赛lcs三号种子队伍介绍
- lol全球总决赛lck三号种子是谁 S14全球总决赛lck三号种子队伍
- 群星.2005-三里屯音乐之男孩女孩的情人节【太合麦田】【WAV+CUE】
- 崔健.2005-给你一点颜色【东西音乐】【WAV+CUE】
- 南台湾小姑娘.1998-心爱,等一下【大旗】【WAV+CUE】
- 【新世纪】群星-美丽人生(CestLaVie)(6CD)[WAV+CUE]
- ProteanQuartet-Tempusomniavincit(2024)[24-WAV]
- SirEdwardElgarconductsElgar[FLAC+CUE]
- 田震《20世纪中华歌坛名人百集珍藏版》[WAV+CUE][1G]
- BEYOND《大地》24K金蝶限量编号[低速原抓WAV+CUE][986M]
- 陈奕迅《准备中 SACD》[日本限量版] [WAV+CUE][1.2G]