实现TFrecords文件的保存与读取
生活随笔
收集整理的這篇文章主要介紹了
实现TFrecords文件的保存与读取
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
import os
import cv2
import numpy as np
import tensorflow as tf
"""
將train文件夾下的cats和dog文件夾處理成train.tfrecords放在train文件夾里
"""
#將圖片的路徑和對(duì)應(yīng)的標(biāo)簽存儲(chǔ)在list中返回
def deal(dir):images = []temp = []for root,dirs,files in os.walk(dir):for name in files:images.append(os.path.join(root,name))for name in dirs:#以dogs cats文件夾形式讀取
temp.append(os.path.join(root,name))labels=[]for one_folder in temp:n_img=len(os.listdir(one_folder))#展開cats或者dogs的圖片
letter=one_folder.split('/')[-1]if letter=='cats':labels=np.append(labels,n_img*[0])#np.append拼接 0是cat 1是dog
else:labels=np.append(labels,n_img*[1])#打亂
temp=np.array([images,labels])temp=temp.transpose()np.random.shuffle(temp)image_list=list(temp[:,0])label_list=list(temp[:,1])label_list=[int(float(i)) for i in label_list]return image_list,label_list
#返回整形特征
def int64_feature(value):return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))
#返回bytes特征
def bytes_feature(value):return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
def convert_to_tfrecord(image_list,label_list):n_samples=len(label_list)writer = tf.python_io.TFRecordWriter('./data/train/train.tfrecords')print('start transform')for i in range(n_samples):try:img=cv2.imread(image_list[i])img_raw = img.tobytes() # 圖片轉(zhuǎn)化成二進(jìn)制
label=int(label_list[i])example=tf.train.Example(features=tf.train.Features(feature={'label':int64_feature(label),
'image':bytes_feature(img_raw)}))writer.write(example.SerializeToString())except:print(image_list[i])os.remove(image_list[i])writer.close()print('transform end')
"""
下面是讀取tfrecord和顯示圖片證明生成的tfrecord正確
"""
filename='./data/train/train.tfrecords'
#讀取并解析.tfrecords文件
def read_and_decode(filename):filename_queue=tf.train.string_input_producer([filename])# 按隊(duì)列的形式讀取
reader=tf.TFRecordReader()_,serialized_example=reader.read(filename_queue)#返回文件名和文件
features=tf.parse_single_example(serialized_example,
features={'label':tf.FixedLenFeature([],tf.int64),#與存儲(chǔ)的類型一致
'image':tf.FixedLenFeature([],tf.string)})img=tf.decode_raw(features['image'],tf.uint8)img=tf.reshape(img,shape=[227,227,3])#img = tf.cast(img, dtype=tf.float32) * (1.0 / 128) - 0.5
label = tf.cast(features['label'], dtype=tf.int32)return img,label
def show():img,label=read_and_decode(filename)img_batch,label_batch=tf.train.shuffle_batch([img,label],batch_size=1,
capacity=11,min_after_dequeue=5)init=tf.global_variables_initializer()with tf.Session() as sess:sess.run(init)threads=tf.train.start_queue_runners(sess=sess)for i in range(10):label=sess.run(label_batch)imgcv2=sess.run(img_batch)imgcv2.resize((227,227,3))print(label)cv2.imshow('img',imgcv2)cv2.waitKey()if __name__ == '__main__':# image_list, label_list = deal('./data/train')
# convert_to_tfrecord(image_list,label_list)
show()
總結(jié)
以上是生活随笔為你收集整理的实现TFrecords文件的保存与读取的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 两层卷积网络实现手写数字的识别(基于te
- 下一篇: Android缓存学习入门