发新帖

tf.contrib.training.bucket_by_sequence_length 相关问题请教

[复制链接]
769 2

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
  1. (_, outputs) = tf.contrib.training.bucket_by_sequence_length(
  2.             max_example_length,
  3.             examples,
  4.             batch_sizes,
  5.             [b + 1 for b in boundaries],
  6.             capacity=2,  # Number of full batches to store, we don't need many.
  7.             bucket_capacities=bucket_capacities,
  8.             dynamic_pad=True,
  9.             keep_input=(max_example_length <= max_length)
  10.         )
复制代码
最近我在看一个 Tensorflow写的 NLP相关的代码,在处理数据的时候,我碰到了一个问题。如上面所示,我 google了很多,但是还是不了解这个函数的输出到底是什么。
下面我给出所有的参数:
max_example_length: 256
examples: 输入数据
batch_sizes:          [512, 409, 341, 292, 256, 204, 170, 146, 128, 102, 85, 73, 64, 51, 42, 36, 32, 25, 21, 18, 16]
boundaries:            [8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224]
bucket_capacities:[1024, 818, 682, 584, 512, 408, 340, 292, 256, 204, 170, 146, 128, 102, 84, 72, 64, 50, 42, 36, 32]
keep_input=True

这个函数的功能大致是:
1. 将输入的句子先按照句子长度 boundaries 进行分割,然后分配到 bucket中
2. 然后再根据 batch_sizes构成 batch

问题:我不明白的是,bucket_capacities的作用是什么,难道是控制每一个 bucket里面句子的个数?这样子的话,假设每一个长度的句子的数量都是足够多,那么是不是每一个 bucket里面都只能是 2* batch_size个句子,那么,每一个 bucket只能产生 2个 batch的数据?所有的 batch用完之后,再重新进行分配?
从代码的运行结果来看,很明显不是,因为比如说 [102]这个长度的 batch就出现了很多次,不止2次。

请教各位大佬!
这样子的函数出来的 batch到底是什么样子的?


我知道答案 回答被采纳将会获得10 金币 + 5 金币 已有2人回答
本楼点评(0) 收起

精彩评论2

neverchange  TF豆豆  发表于 2018-7-4 12:06:48 | 显示全部楼层
本楼点评(0) 收起
kdongyi  TF荚荚  发表于 2018-7-7 10:56:03 | 显示全部楼层
def bucket_by_sequence_length(element_length_func,
                              bucket_boundaries,
                              bucket_batch_sizes,
                              padded_shapes=None,
                              padding_values=None,
                              pad_to_bucket_boundary=False):
  """A transformation that buckets elements in a `Dataset` by length.
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表