(一)csv文件读取
运行代码之前,先手动创建文件,流程如下图:
# csv文件读取示例
import tensorflow as tf
import os
def csv_read(filelist):
# 2. 构建文件队列
file_queue = tf.train.string_input_producer(filelist)
# 3. 构建csv reader,读取队列内容(一行)
reader = tf.TextLineReader()
k, v = reader.read(file_queue)
# 4. 对每行内容进行解码
## record_defaults:指定每一个样本每一列的类型,指定默认值
records = [["None"], ["None"]]
example, label = tf.decode_csv(v, record_defaults=records) # 每行两个值
# 5. 批处理
# batch_size: 跟队列大小无关,只决定本批次取多少数据
example_bat, label_bat = tf.train.batch([example, label],
batch_size=9,
num_threads=1,
capacity=9)
return example_bat, label_bat
if __name__ == "__main__":
# 1. 找到文件,构造一个列表
dir_name = "../data/"
file_names = os.listdir(dir_name)
file_list = []
for f in file_names:
file_list.append(os.path.join(dir_name, f)) # 拼接目录和文件名
example, label = csv_read(file_list)
# 开启session运行结果
with tf.Session() as sess:
coord = tf.train.Coordinator() # 定义线程协调器
# 开启读取文件线程
# 调用 tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中
# 供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态
# 返回一组线程
threads = tf.train.start_queue_runners(sess, coord=coord)
print(sess.run([example, label])) # 打印读取的内容
# 回收线程
coord.request_stop()
coord.join(threads)
(二)图片文件的读取
图片文件读取API
图像读取器:tf.WholeFileReader
功能:将文件的全部内容作为值输出的
read方法:读取文件内容,返回文件名和文件内容
图像解码器:
tf.image.decode jpeg(constants):解码jpeg格式tf.image.decode_png(constants):解码png格式
返回值:3-D张量,[height, width, channels]
修改图像大小:
tf.image.resize_images(images,size)
images:图片数据,3-D或4-D张量
3-D:[长,宽,通道]
4-D:[数量,长,宽,通道]
size:1-D int32张量,[长、宽](不需要传通道数)
# 图片文件读取示例
import tensorflow as tf
import os
def img_read(filelist):
#1.构建文件队列
file_queue = tf.train.string_input_producer(filelist)
# 2. 定义reader,读取文件内容,默认读取一张图片
reader = tf.WholeFileReader()
k, v = reader.read(file_queue) #读取样本数据
# 3.解码
img = tf.image.decode_jpeg(v)
# 4. 批处理, 图片需要处理成统一大小
img_resized = tf.image.resize(img, [200, 200]) # 200*200
img_resized.set_shape([200, 200, 3]) # 固定样本形状,批处理时对数据形状有要求(静态形状)
img_bat = tf.train.batch([img_resized],
batch_size=10,
num_threads=1)
return img_bat
# 1. 找到文件,构造一个列表
dir_name = "test_img/"
file_names = os.listdir(dir_name)
file_list = []
for f in file_names:
file_list.append(os.path.join(dir_name, f)) # 拼接目录和文件名
imgs = img_read(file_list)
# 开启session运行结果
with tf.Session() as sess:
coord = tf.train.Coordinator() # 定义线程协调器
# 开启读取文件线程
# 调用 tf.train.start_queue_runners 之后,才会真正把tensor推入内存序列中
# 供计算单元调用,否则会由于内存序列为空,数据流图会处于一直等待状态