tf.data.Dataset.padded_batch 以不同的方式填充每个功能
Posted
技术标签:
【中文标题】tf.data.Dataset.padded_batch 以不同的方式填充每个功能【英文标题】:tf.data.Dataset.padded_batch pad differently each feature 【发布时间】:2018-09-25 04:15:18 【问题描述】:我有一个 tf.data.Dataset
实例,它拥有 3 个不同的功能
label
是一个标量
sequence_feature
是一个标量序列
seq_of_seqs_feature
是序列特征的序列
我正在尝试使用 tf.data.Dataset.padded_batch()
生成填充数据作为模型的输入 - 我想以不同的方式填充每个功能。
示例批次:
['label': 24,
'sequence_feature': [1, 2],
'seq_of_seqs_feature': [[11.1, 22.2],
[33.3, 44.4]],
'label': 32,
'sequence_feature': [3, 4, 5],
'seq_of_seqs_feature': [[55.55, 66.66]]]
预期输出:
['label': 24,
'sequence_feature': [1, 2, 0],
'seq_of_seqs_feature': [[11.1, 22.2],
[33.3, 44.4]],
'label': 32,
'sequence_feature': [3, 4, 5],
'seq_of_seqs_feature': [[55.55, 66.66],
0.0, 0.0 ]]
如您所见,label
特性不应被填充,sequence_feature
和 seq_of_seqs_feature
应由给定批次中对应的最长条目填充。
【问题讨论】:
【参考方案1】:tf.data.Dataset.padded_batch()
方法允许您为生成的批次的每个组件(功能)指定padded_shapes
。例如,如果您的输入数据集名为ds
:
padded_ds = ds.padded_batch(
BATCH_SIZE,
padded_shapes=
'label': [], # Scalar elements, no padding.
'sequence_feature': [None], # Vector elements, padded to longest.
'seq_of_seqs_feature': [None, None], # Matrix elements, padded to longest
) # in each dimension.
请注意,padded_shapes
参数与输入数据集的元素具有相同的结构,因此在这种情况下,它需要一个字典,其中的键与您的特征名称匹配。
【讨论】:
以上是关于tf.data.Dataset.padded_batch 以不同的方式填充每个功能的主要内容,如果未能解决你的问题,请参考以下文章