我無法將多個 MapDataset 連接到一個 MapDataset。例如,一個 MapDataset 是:
<MapDataset element_spec={'input_ids_task1': TensorSpec(), 'mask_task1': TensorSpec(), 'type_ids_task1': TensorSpec()}
另一個是:
<MapDataset element_spec={'input_ids_task2': TensorSpec(), 'mask_task2': TensorSpec(), 'type_ids_task2': TensorSpec()}
我想將它們連接到:
<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()}
我似乎有一些答案可以通過以下方式壓縮兩個資料集:
h = tf.data.Dataset.zip((a, b))
然后h是一個 ZipDataset:
<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:
h.map(lambda x,y: x)
但是,我不確定如何將它們合并到一個字典中。
如果這是不可能的,我可以將我的輸入層更改為包含多個字典的元組以獲取資料集輸入嗎?
uj5u.com熱心網友回復:
不確定您的資料到底是什么樣的,但您應該能夠執行以下操作:
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)
<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)>}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/430108.html
上一篇:如何讀取和顯示MNIST資料集?
