Python 如何填充包含非统一tf.RaggedTensors的tf.data.Dataset?

Python 如何填充包含非统一tf.RaggedTensors的tf.data.Dataset?,python,tensorflow,nlp,padding,ragged,Python,Tensorflow,Nlp,Padding,Ragged,有一个关于创建的教程,该教程包含多个不同长度的按单词编码的句子列表,首先用tf.keras.preprocessing填充长度差异,然后从这些编码的句子创建数据集 我试图先创建数据集,然后用dataset.padded_batch()填充并批处理它,因为使用单个API它看起来更内聚 我发现的问题是,如果事先没有填充,我会得到一个长度不同的列表列表(如下面的编码问题列表),无法直接用于创建数据集(据我所知) 创建数据集而不使用此类对象填充的方法显然是使用tf.RaggedTensor(s)。我现在

有一个关于创建的教程,该教程包含多个不同长度的按单词编码的句子列表,首先用
tf.keras.preprocessing
填充长度差异,然后从这些编码的句子创建数据集

我试图先创建数据集,然后用
dataset.padded_batch()
填充并批处理它,因为使用单个API它看起来更内聚

我发现的问题是,如果事先没有填充,我会得到一个长度不同的列表列表(如下面的编码问题列表),无法直接用于创建数据集(据我所知)

创建数据集而不使用此类对象填充的方法显然是使用
tf.RaggedTensor
(s)。我现在可以用
tf.data.dataset.from\u tensor\u slices
创建一个数据集,但是之后无法填充数据集。

我得到的错误如下,这与我的数据集内容的指定形状有关(这是一维的,因为它只是不同长度列表的列表):

dataset=dataset.padded_batch(批次大小,填充形状=({'inputs':(无,最大长度),
“dec_输入”:(无,最大长度)},
{'outputs':(无,最大长度)})
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.2.4\helpers\pydev\pydevd.py”,第1415行,在_exec中
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“C:\Program Files\JetBrains\PyCharm Community Edition 2019.2.4\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“C:/Users/--/Desktop/IA/PyProjects/NLP_models/Natural Language Inference/transformer_chatbot.py”,第208行,在
{'outputs':(无,最大长度)})
文件“C:\Users \-\Desktop\IA\PyProjects\NLP\U models\venv\lib\site packages\tensorflow\u core\python\data\ops\dataset\u ops.py”,第1097行,填充批处理
删除(剩余部分)
文件“C:\Users \--\Desktop\IA\PyProjects\NLP\u models\venv\lib\site packages\tensorflow\u core\python\data\ops\dataset\u ops.py”,第3341行,在\uuu init中__
_填充形状到张量(填充形状,输入组件形状))
文件“C:\Users\---\Desktop\IA\PyProjects\NLP\u models\venv\lib\site packages\tensorflow\u core\python\data\ops\dataset\u ops.py”,第3269行,填充形状为到张量
%(填充的_形状作为_形状,输入_组件_形状))
ValueError:填充形状(无,40)与相应的输入组件形状(无,)不兼容。

如何为dataset.padded_batch()指定一些引用形状,以便它可以使用一些MAX_LEN填充第二个维度。或者在没有tf.keras.preprocessing步骤的情况下,是否有其他填充方式?

Q&A在这个问题上可能会帮助您解决填充形状是否只有一个元素的问题?如果每个元素都是一个向量,那么只需填充该维度,对吗?之后的批处理将添加批处理维度。@jdehesa您是对的,但是如何为填充张量设置最大值?另外,我也试着像你说的那样将填充形状设置为(无),现在我得到了以下错误:
填充值0和输入数据集组件0之间的类型不匹配:int32 vs.variant
Q&A在这个问题上可能会帮你解决填充形状不应该只有一个元素吗?如果每个元素都是一个向量,那么只需填充该维度,对吗?之后的批处理将添加批处理维度。@jdehesa您是对的,但是如何为填充张量设置最大值?另外,我也尝试了您所说的将填充形状设置为(无),现在我得到了以下错误:
填充值0和输入数据集组件0之间的类型不匹配:int32 vs.variant
Sample question: i really, really, really wanna go, but i can t. not unless my sister goes.
Sample answer: i m workin on it. but she doesn t seem to be goin for him.
Encoded sample question: [3, 224, 1, 224, 1, 154, 295, 180, 1, 42, 3, 32, 5335, 4, 31, 589, 27, 416, 1387, 5265]
List of encoded questions: [[5475, 32, 16, 106, 38, 2392, 25, 3796, 4313, 11, 5143, 5073, 34, 565, 108, 1099, 4422, 1278, 1929, 76, 45, 5, 3911, 4, 272, 5265, 5476], [5475, 77, 1, 3, 168, 16, 69, 246, 37, 2412, 1, 49, 13, 8, 1315, 37, 35, 5265, 5476], ...]
dataset = dataset.padded_batch(BATCH_SIZE, padded_shapes=({'inputs': (None, MAX_LENGTH),
                                                               'dec_inputs': (None, MAX_LENGTH)},
                                                              {'outputs': (None, MAX_LENGTH)}))


Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.2.4\helpers\pydev\pydevd.py", line 1415, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2019.2.4\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/---/Desktop/IA/PyProjects/NLP_models/Natural Language Inference/transformer_chatbot.py", line 208, in <module>
    {'outputs': (None, MAX_LENGTH)}))
  File "C:\Users\---\Desktop\IA\PyProjects\NLP_models\venv\lib\site-packages\tensorflow_core\python\data\ops\dataset_ops.py", line 1097, in padded_batch
    drop_remainder)
  File "C:\Users\---\Desktop\IA\PyProjects\NLP_models\venv\lib\site-packages\tensorflow_core\python\data\ops\dataset_ops.py", line 3341, in __init__
    _padded_shape_to_tensor(padded_shape, input_component_shape))
  File "C:\Users\----\Desktop\IA\PyProjects\NLP_models\venv\lib\site-packages\tensorflow_core\python\data\ops\dataset_ops.py", line 3269, in _padded_shape_to_tensor
    % (padded_shape_as_shape, input_component_shape))

ValueError: The padded shape (None, 40) is not compatible with the corresponding input component shape (None,).