【问题标题】:Difference between tf.train.shuffle_batch_join and tf.train.shuffle_batchtf.train.shuffle_batch_join 和 tf.train.shuffle_batch 的区别
【发布时间】:2018-07-11 03:37:29
【问题描述】:

查看两个函数签名,带参数

tf.train.shuffle_batch_join(
tensors_list,
batch_size,
capacity,
min_after_dequeue,
seed=None,
enqueue_many=False,
shapes=None,
allow_smaller_final_batch=False,
shared_name=None,
name=None
)

tf.train.shuffle_batch(
tensors,
batch_size,
capacity,
min_after_dequeue,
num_threads=1,
seed=None,
enqueue_many=False,
shapes=None,
allow_smaller_final_batch=False,
shared_name=None,
name=None
)

atguments 之间的唯一区别是num_threads,它直观地表示tf.train.shuffle_batch 可以由多个线程或进程处理,除此之外,它们似乎做了几乎相同的工作。

我想知道除了批处理的多处理之外,是否存在一个根本区别,即人们可能会选择一个而不是另一个。

【问题讨论】:

    标签: python python-3.x tensorflow machine-learning pipeline


    【解决方案1】:

    引用自 shuffle_batch_join TF 文档:

    tensors_list 参数是张量元组的列表,或张量字典的列表。列表中的每个元素的处理方式与 tf.train.shuffle_batch() 的 tensors 参数类似。

    基本上,shuffle_batch_join 期望:

    • 接收张量列表
    • 对列表的每个成员执行 shuffle_batch
    • 返回数量和类型与 tensors_list[i] 相同的张量列表。

    请注意,如果您使用 shuffle_batch_join :

    len(tensors_list) 线程将被启动,线程 i 将来自 tensors_list[i] 的张量排入队列。 tensors_list[i1][j] 必须在类型和形状上匹配 tensors_list[i2][j],如果 enqueue_many 为 true,则第一个维度除外。

    Here is a link to the doc.

    【讨论】:

    • 我想我已经阅读了文档,除了函数参数中的一个重载另一个,我的问题是使用一个与另一个有什么区别?性能?我最初的想法是批量洗牌,而不是逐批的元素明智的洗牌?文档对每个参数都说了同样的话
    • 看看this doc。基本上,如果您有多个阅读器并希望在文件之间随机播放,则首选 shuffle_batch_join。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2011-10-20
    • 2020-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多