tensorflow笔记 string_input_producer, slice_input_producer

本文解析了TensorFlow中数据读取的两步流程,即文件名队列和内存队列的建立与处理,介绍了三种用于创建文件名队列的函数,并强调了使用tf.data API的现代数据读取方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tensorflow将读取数据分为了两个步骤,先读入文件名队列,再读入内存队列进行运算。为了减少GPU的等待时间,提高计算速度,tensorflow使用两个线程来分别处理这两个步骤。tf有三个函数string_input_producer, slice_input_producer, input_producer用于建立文件名队列。

函数参数如下所示,除了tensor list是必须外,其余都可以省略。input_producer输入为一个tensor,每行是一个数据,slice_input_producer输入为一个tensor列表,string_input_producer输入为一个string类型的tensor列表。

tf.train.input_producer(
    input_tensor,
    element_shape=None,
    num_epochs=None, #文件名队列中数据重复n次,保证每个文件都会被访问n次
    shuffle=True,
    seed=None,
    capacity=32,
    shared_name=None,
    summary_name=None,
    name=None,
    cancel_op=None
)

tf.train.string_input_producer(
    string_tensor,
    num_epochs=None,
    shuffle=True,
    seed=None,
    capacity=32,
    shared_name=None,
    name=None,
    cancel_op=None
)

tf.train.slice_input_producer(
    tensor_list,
    num_epochs=None,
    shuffle=True,
    seed=None,
    capacity=32,
    shared_name=None,
    name=None
)

文件名队列并不会直接读入,需要用tf.train.start_queue_runners()启动

threads = tf.train.start_queue_runners(sess,coord)

官方建议:
THIS FUNCTION IS DEPRECATED. It will be removed in a future version. Instructions for updating: Queue-based input pipelines have been replaced by tf.data. Use tf.data.Dataset.from_tensor_slices(input_tensor).shuffle(tf.shape(input_tensor, out_type=tf.int64)[0]).repeat(num_epochs). If shuffle=False, omit the .shuffle(...)

现在一般使用更简洁的data api来读取数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值