首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将两个dict MapDataset合并为一个MapDataset?

如何将两个dict MapDataset合并为一个MapDataset?
EN

Stack Overflow用户
提问于 2022-02-18 06:01:51
回答 1查看 183关注 0票数 1

我很难将几个MapDatasets转换成一个MapDataset。例如,一个MapDataset是:

代码语言:javascript
运行
AI代码解释
复制
<MapDataset element_spec={'input_ids_task1': TensorSpec(), 'mask_task1': TensorSpec(), 'type_ids_task1': TensorSpec()}

另一个是:

代码语言:javascript
运行
AI代码解释
复制
<MapDataset element_spec={'input_ids_task2': TensorSpec(), 'mask_task2': TensorSpec(), 'type_ids_task2': TensorSpec()}

我想提醒他们:

代码语言:javascript
运行
AI代码解释
复制
<MapDataset element_spec={'input_ids_task1': TensorSpec(), 'mask_task1': TensorSpec(), 'type_ids_task1': TensorSpec(), 'input_ids_task2': TensorSpec(), 'mask_task2': TensorSpec(), 'type_ids_task2': TensorSpec()}

我似乎有一些答案可以通过以下方式压缩这两个数据集:

代码语言:javascript
运行
AI代码解释
复制
h = tf.data.Dataset.zip((a, b))

那么h将是一个ZipDataset:

代码语言:javascript
运行
AI代码解释
复制
<ZipDataset element_spec=({'input_ids_task1': TensorSpec(), 'mask_task1': TensorSpec(), 'type_ids_task1': TensorSpec()}, {'input_ids_task2': TensorSpec(), 'mask_task2': TensorSpec(), 'type_ids_task2': TensorSpec()})

因为这两个数据集将是一个元组中的两个数据集。

我可以通过以下方式检索MapDataset:

代码语言:javascript
运行
AI代码解释
复制
h.map(lambda x,y: x)

但是,我不知道我怎么能把它们合并成一个小块。

如果不可能,我是否可以将输入层更改为包含多个数据集的元组以获取数据集输入?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-18 06:19:03

不确定您的数据到底是什么样子,但是您应该能够这样做:

代码语言:javascript
运行
AI代码解释
复制
import tensorflow as tf

d1 = {
    'input_ids_task1': [[1, 2, 3], [1, 2, 2]],
    'mask_task1': [[1, 2, 3], [1, 2, 2]],
    'type_ids_task1': [[1, 2, 3], [1, 2, 2]] 
}

d2 = {
    'input_ids_task2': [[1, 2, 3], [1, 2, 2]],
    'mask_task2': [[1, 2, 3], [1, 2, 2]],
    'type_ids_task2': [[1, 2, 3], [1, 2, 2]] 
}

dataset1 = tf.data.Dataset.from_tensor_slices((d1))
dataset2 = tf.data.Dataset.from_tensor_slices((d2))

h = tf.data.Dataset.zip((dataset1, dataset2))
h = h.map(lambda x, y: {**x, **y})
print(h)

for d in h:
  print(d)
代码语言:javascript
运行
AI代码解释
复制
<MapDataset element_spec={'input_ids_task1': TensorSpec(shape=(3,), dtype=tf.int32, name=None), 'mask_task1': TensorSpec(shape=(3,), dtype=tf.int32, name=None), 'type_ids_task1': TensorSpec(shape=(3,), dtype=tf.int32, name=None), 'input_ids_task2': TensorSpec(shape=(3,), dtype=tf.int32, name=None), 'mask_task2': TensorSpec(shape=(3,), dtype=tf.int32, name=None), 'type_ids_task2': TensorSpec(shape=(3,), dtype=tf.int32, name=None)}>
{'input_ids_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, 'mask_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, 'type_ids_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, 'input_ids_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, 'mask_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, 'type_ids_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>}
{'input_ids_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>, 'mask_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>, 'type_ids_task1': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>, 'input_ids_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>, 'mask_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>, 'type_ids_task2': <tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 2], dtype=int32)>}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71174730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档