1.队列和线程
2.文件读取
2.1文件读取流程
- 构造一个队列
- 读取队列内容-read
- csv文件-默认读取一行
- 二进制文件-指定一个样本的bytes读取
- 图片文件-一张一张的读取
- 对内容进行解码
- 批处理
一次读取多个样本.主线程主要用来训练,子线程主要用来读取
就是说我们设置一个阈值为50,只要主线程读取够50个样本,我们就拿去进行训练.
2.2.文件读取API
- 构造文件队列
Q=tf.train.string_input_producer(
string_tensor,
shuffle=True,
)
- 构造文件阅读器
txtReader=tf.TextLineReader()
fixeReader=tf.FixedLengthRecordReader(
record_bytes=10,指定每次读取的字节数
)
imgReader=tf.TFRecordReader()
reader=tf.read_file(filename)
- 文件解码器
data,target=tf.decode_csv(
records=value,
record_defaults,
)
data,target=tf.decode_raw(
bytes,
out_type,
)
- 线程
threads=tf.train.start_queue_runners(
sess=None,
coord=None,
)
- 管道读端批处理
tf.train.batch(
tensors,
batch_size=10,
num_threads=3,
capacity=32,
)
tf.train.shuffle_batch(
tensors,batch_size,
capacity,
min_after_dequeue,
num_threads=1,
)
乱序读取指定大小(个数)的张量
min_after_dequeue:留下队列里的张量个数,能够保持随机打乱
2.3文件读取案例
import os
import tensorflow as tf
def csvreader(filelist):
file_queue=tf.train.string_input_producer(string_tensor=filelist)
txtReader=tf.TextLineReader()
key,value=txtReader.read(file_queue)
example,label=tf.decode_csv(
records=value,
record_defaults=[['None'],[0]],
)
example_batch,label_batch=tf.train.batch(
tensors=[example,label],
batch_size=10,
num_threads=1,
capacity=20,
)
return example_batch,label_batch
if __name__=='__main__':
BASE='./data/'
filename=os.listdir(BASE)
filelist=[os.path.join(BASE,file) for file in filename]
example_batch,label_batche=csvreader(filelist)
with tf.Session() as sess:
coord=tf.train.Coordinator()
threads=tf.train.start_queue_runners(sess,coord=coord)
ds,ls=sess.run([example_batch,label_batche])
for i in range(len(ds)):
print(ds[i],'===',ls[i])
coord.request_stop()
coord.join(threads)
3.图像处理
3.1图像基本知识
- 图像数字化三要素
长度,宽度,通道数:[height,width,channels]
3.2读取图像API
3.3TFRecords分析,存取