You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

mindspore.dataset.Dataset.rst 24 kB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554
  1. .. py:method:: get_dataset_size()
  2. 返回一个epoch中的batch数。
  3. **返回:**
  4. int,batch的数目。
  5. .. py:method:: get_repeat_count()
  6. 获取 `RepeatDataset` 中的repeat次数(默认为1)。
  7. **返回:**
  8. int,repeat次数。
  9. .. py:method:: input_indexs
  10. :property:
  11. 获取input index信息。
  12. **返回:**
  13. input index信息的元组。
  14. **样例:**
  15. >>> # dataset是Dataset对象的实例
  16. >>> # 设置input_indexs
  17. >>> dataset.input_indexs = 10
  18. >>> print(dataset.input_indexs)
  19. 10
  20. .. py:method:: map(operations, input_columns=None, output_columns=None, column_order=None, num_parallel_workers=None, python_multiprocessing=False, cache=None, callbacks=None)
  21. 将operations列表中的每个operation作用于数据集。
  22. 作用的顺序由每个operation在operations参数中的位置决定。
  23. 将首先作用operation[0],然后operation[1],operation[2],以此类推。
  24. 每个operation将数据集中的一列或多列作为输入,并将输出零列或多列。
  25. 第一个operation将 `input_columns` 中指定的列作为输入。
  26. 如果operations列表中存在多个operation,则上一个operation的输出列将用作下一个operation的输入列。
  27. 最后一个operation输出列的列名由 `output_columns` 指定。
  28. 只有在 `column_order` 中指定的列才会传播到子节点,并且列的顺序将与 `column_order` 中指定的顺序相同。
  29. **参数:**
  30. - **operations** (Union[list[TensorOp], list[functions]]) - 要作用于数据集的operations列表。将按operations列表中显示的顺序作用在数据集。
  31. - **input_columns** (Union[str, list[str]], optional) - 第一个operation输入的列名列表。此列表的大小必须与第一个operation预期的输入列数相匹配。(默认为None,从第一列开始,无论多少列,都将传递给第一个operation)。
  32. - **output_columns** (Union[str, list[str]], optional) - 最后一个operation输出的列名列表。如果 `input_columns` 长度不等于 `output_columns` 长度,则此参数必选。此列表的大小必须与最后一个operation的输出列数相匹配(默认为None,输出列将与输入列具有相同的名称,例如,替换一些列)。
  33. - **column_order** (list[str], optional) - 指定整个数据集中所需的所有列的列表。当 `input_columns` 长度不等于 `output_columns` 长度时,则此参数必选。注意:这里的列表不仅仅是参数 `input_columns` 和 `output_columns` 中指定的列。
  34. - **num_parallel_workers** (int, optional) - 用于并行处理数据集的线程数(默认为None,将使用配置文件中的值)。
  35. - **python_multiprocessing** (bool, optional) - 将Python operations委托给多个工作进程进行并行处理。如果Python operations计算量很大,此选项可能会很有用(默认为False)。
  36. - **cache** (DatasetCache, optional) - 使用Tensor缓存服务加快数据集处理速度(默认为None,即不使用缓存)。
  37. - **callbacks** (DSCallback, list[DSCallback], optional) - 要调用的Dataset回调函数列表(默认为None)。
  38. **返回:**
  39. MapDataset,map操作后的数据集。
  40. **样例:**
  41. >>> # dataset是Dataset的一个实例,它有2列,"image"和"label"。
  42. >>>
  43. >>> # 定义两个operation,每个operation接受1列输入,输出1列。
  44. >>> decode_op = c_vision.Decode(rgb=True)
  45. >>> random_jitter_op = c_vision.RandomColorAdjust(brightness=(0.8, 0.8), contrast=(1, 1),
  46. ... saturation=(1, 1), hue=(0, 0))
  47. >>>
  48. >>> # 1)简单的map示例。
  49. >>>
  50. >>> # 在列“image"上应用decode_op。此列将被
  51. >>> # decode_op的输出列替换。由于未指定column_order,因此两列“image"
  52. >>> # 和“label"将按其原始顺序传播到下一个节点。
  53. >>> dataset = dataset.map(operations=[decode_op], input_columns=["image"])
  54. >>>
  55. >>> # 解码列“image"并将其重命名为“decoded_image"。
  56. >>> dataset = dataset.map(operations=[decode_op], input_columns=["image"], output_columns=["decoded_image"])
  57. >>>
  58. >>> # 指定输出列的顺序。
  59. >>> dataset = dataset.map(operations=[decode_op], input_columns=["image"],
  60. ... output_columns=None, column_order=["label", "image"])
  61. >>>
  62. >>> # 将列“image"重命名为“decoded_image",并指定输出列的顺序。
  63. >>> dataset = dataset.map(operations=[decode_op], input_columns=["image"],
  64. ... output_columns=["decoded_image"], column_order=["label", "decoded_image"])
  65. >>>
  66. >>> # 将列“image"重命名为“decoded_image",并只保留此列。
  67. >>> dataset = dataset.map(operations=[decode_op], input_columns=["image"],
  68. ... output_columns=["decoded_image"], column_order=["decoded_image"])
  69. >>>
  70. >>> # 使用用户自定义Python函数的map简单示例。列重命名和指定列顺序
  71. >>> # 的方式同前面的示例相同。
  72. >>> dataset = ds.NumpySlicesDataset(data=[[0, 1, 2]], column_names=["data"])
  73. >>> dataset = dataset.map(operations=[(lambda x: x + 1)], input_columns=["data"])
  74. >>>
  75. >>> # 2)多个operation的map示例。
  76. >>>
  77. >>> # 创建一个数据集,图像被解码,并随机颜色抖动。
  78. >>> # decode_op以列“image"作为输入,并输出一列。将
  79. >>> # decode_op输出的列作为输入传递给random_jitter_op。
  80. >>> # random_jitter_op将输出一列。列“image"将替换为
  81. >>> # random_jitter_op(最后一个operation)输出的列。所有其他
  82. >>> # 列保持不变。由于未指定column_order,因此
  83. >>> # 列的顺序将保持不变。
  84. >>> dataset = dataset.map(operations=[decode_op, random_jitter_op], input_columns=["image"])
  85. >>>
  86. >>> # 将random_jitter_op输出的列重命名为“image_mapped"。
  87. >>> # 指定列顺序的方式与1中的示例相同。
  88. >>> dataset = dataset.map(operations=[decode_op, random_jitter_op], input_columns=["image"],
  89. ... output_columns=["image_mapped"])
  90. >>>
  91. >>> # 使用用户自定义Python函数的多个operation的map示例。列重命名和指定列顺序
  92. >>> # 的方式与1中的示例相同。
  93. >>> dataset = ds.NumpySlicesDataset(data=[[0, 1, 2]], column_names=["data"])
  94. >>> dataset = dataset.map(operations=[(lambda x: x * x), (lambda x: x - 1)], input_columns=["data"],
  95. ... output_columns=["data_mapped"])
  96. >>>
  97. >>> # 3)输入列数不等于输出列数的示例。
  98. >>>
  99. >>> # operation[0] 是一个 lambda,它以 2 列作为输入并输出 3 列。
  100. >>> # operations[1] 是一个 lambda,它以 3 列作为输入并输出 1 列。
  101. >>> # operations[2] 是一个 lambda,它以 1 列作为输入并输出 4 列。
  102. >>> #
  103. >>> # 注:operation[i]的输出列数必须等于
  104. >>> # operation[i+1]的输入列。否则,map算子会
  105. >>> # 出错。
  106. >>> operations = [(lambda x, y: (x, x + y, x + y + 1)),
  107. ... (lambda x, y, z: x * y * z),
  108. ... (lambda x: (x % 2, x % 3, x % 5, x % 7))]
  109. >>>
  110. >>> # 注:由于输入列数与
  111. >>> # 输出列数不相同,必须指定output_columns和column_order
  112. >>> # 参数。否则,此map算子也会出错。
  113. >>>
  114. >>> dataset = ds.NumpySlicesDataset(data=([[0, 1, 2]], [[3, 4, 5]]), column_names=["x", "y"])
  115. >>>
  116. >>> # 按以下顺序将所有列传播到子节点:
  117. >>> dataset = dataset.map(operations, input_columns=["x", "y"],
  118. ... output_columns=["mod2", "mod3", "mod5", "mod7"],
  119. ... column_order=["mod2", "mod3", "mod5", "mod7"])
  120. >>>
  121. >>> # 按以下顺序将某些列传播到子节点:
  122. >>> dataset = dataset.map(operations, input_columns=["x", "y"],
  123. ... output_columns=["mod2", "mod3", "mod5", "mod7"],
  124. ... column_order=["mod7", "mod3", "col2"])
  125. .. py:method:: num_classes()
  126. 获取数据集中的样本的class数目。
  127. **返回:**
  128. int,class数目。
  129. .. py:method:: output_shapes()
  130. 获取输出数据的shape。
  131. **返回:**
  132. list,每列shape的列表。
  133. .. py:method:: output_types()
  134. 获取输出数据类型。
  135. **返回:**
  136. list,每列类型的列表。
  137. .. py:method:: project(columns)
  138. 在输入数据集上投影某些列。
  139. 从数据集中选择列,并以指定的顺序传输到流水线中。
  140. 其他列将被丢弃。
  141. **参数:**
  142. **columns** (Union[str, list[str]]) - 要投影列的列名列表。
  143. **返回:**
  144. ProjectDataset,投影后的数据集对象。
  145. **样例:**
  146. >>> # dataset是Dataset对象的实例
  147. >>> columns_to_project = ["column3", "column1", "column2"]
  148. >>>
  149. >>> # 创建一个数据集,无论列的原始顺序如何,依次包含column3, column1, column2。
  150. >>> dataset = dataset.project(columns=columns_to_project)
  151. .. py:method:: rename(input_columns, output_columns)
  152. 重命名输入数据集中的列。
  153. **参数:**
  154. - **input_columns** (Union[str, list[str]]) - 输入列的列名列表。
  155. - **output_columns** (Union[str, list[str]]) - 输出列的列名列表。
  156. **返回:**
  157. RenameDataset,重命名后数据集对象。
  158. **样例:**
  159. >>> # dataset是Dataset对象的实例
  160. >>> input_columns = ["input_col1", "input_col2", "input_col3"]
  161. >>> output_columns = ["output_col1", "output_col2", "output_col3"]
  162. >>>
  163. >>> # 创建一个数据集,其中input_col1重命名为output_col1,
  164. >>> # input_col2重命名为output_col2,input_col3重命名
  165. >>> # 为output_col3。
  166. >>> dataset = dataset.rename(input_columns=input_columns, output_columns=output_columns)
  167. .. py:method:: repeat(count=None)
  168. 重复此数据集 `count` 次。如果count为None或-1,则无限重复。
  169. .. note::
  170. repeat和batch的顺序反映了batch的数量。建议:repeat操作在batch操作之后使用。
  171. **参数:**
  172. **count** (int) - 数据集重复的次数(默认为None)。
  173. **返回:**
  174. RepeatDataset,重复操作后的数据集对象。
  175. **样例:**
  176. >>> # dataset是Dataset对象的实例
  177. >>>
  178. >>> # 创建一个数据集,数据集重复50个epoch。
  179. >>> dataset = dataset.repeat(50)
  180. >>>
  181. >>> # 创建一个数据集,其中每个epoch都是单独打乱的。
  182. >>> dataset = dataset.shuffle(10)
  183. >>> dataset = dataset.repeat(50)
  184. >>>
  185. >>> # 创建一个数据集,打乱前先将数据集重复
  186. >>> # 50个epoch。shuffle算子将
  187. >>> # 整个50个epoch视作一个大数据集。
  188. >>> dataset = dataset.repeat(50)
  189. >>> dataset = dataset.shuffle(10)
  190. ..py:method:: reset()
  191. 重置下一个epoch的数据集。
  192. ..py:method:: save(file_name, num_files=1, file_type='mindrecord')
  193. 将流水线正在处理的数据保存为通用的数据集格式。支持的数据集格式:'mindrecord'。
  194. 将数据保存为'mindrecord'格式时存在隐式类型转换。转换表展示如何执行类型转换。
  195. .. list-table:: 保存为'mindrecord'格式时的隐式类型转换
  196. :widths: 25 25 50
  197. :header-rows: 1
  198. * - 'dataset'类型
  199. - 'mindrecord'类型
  200. - 详细
  201. * - bool
  202. - None
  203. - 不支持
  204. * - int8
  205. - int32
  206. -
  207. * - uint8
  208. - bytes(1D uint8)
  209. - Drop dimension
  210. * - int16
  211. - int32
  212. -
  213. * - uint16
  214. - int32
  215. -
  216. * - int32
  217. - int32
  218. -
  219. * - uint32
  220. - int64
  221. -
  222. * - int64
  223. - int64
  224. -
  225. * - uint64
  226. - None
  227. - 不支持
  228. * - float16
  229. - float32
  230. -
  231. * - float32
  232. - float32
  233. -
  234. * - float64
  235. - float64
  236. -
  237. * - string
  238. - string
  239. - 不支持多维字符串
  240. .. note::
  241. 1. 如需按顺序保存示例,请将数据集的shuffle设置为False,将 `num_files` 设置为1。
  242. 2. 在调用函数之前,不要使用batch算子、repeat算子或具有随机属性的数据增强的map算子。
  243. 3. 当数据的维度可变时,只支持1维数组或者在0维变化的多维数组。
  244. 4. 不支持DE_UINT64类型、多维的DE_UINT8类型、多维DE_STRING类型。
  245. **参数:**
  246. - **file_name** (str) - 数据集文件的路径。
  247. - **num_files** (int, optional) - 数据集文件的数量(默认为1)。
  248. - **file_type** (str, optional) - 数据集格式(默认为'mindrecord')。
  249. ..py:method:: set_dynamic_columns(columns=None)
  250. 设置源数据的动态shape信息,需要在定义数据处理流水线后设置。
  251. **参数:**
  252. **columns** (dict) - 包含数据集中每列shape信息的字典。shape[i]为 `None` 表示shape[i]的数据长度是动态的。
  253. ..py:method:: shuffle(buffer_size)
  254. 使用以下策略随机打乱此数据集的行:
  255. 1. 生成一个shuffle缓冲区包含buffer_size条数据行。
  256. 2. 从shuffle缓冲区中随机选择一个元素,作为下一行传播到子节点。
  257. 3. 从父节点获取下一行(如果有的话),并将其放入shuffle缓冲区中。
  258. 4. 重复步骤2和3,直到打乱缓冲区中没有数据行为止。
  259. 可以提供随机种子,在第一个epoch中使用。在随后的每个epoch,种子都会被设置成一个新产生的随机值。
  260. **参数:**
  261. **buffer_size** (int) - 用于shuffle的缓冲区大小(必须大于1)。将buffer_size设置为等于数据集大小将导致在全局shuffle。
  262. **返回:**
  263. ShuffleDataset,打乱后的数据集对象。
  264. **异常:**
  265. **RuntimeError** - 打乱前存在同步操作。
  266. **样例:**
  267. >>> # dataset是Dataset对象的实例
  268. >>> # 可以选择设置第一个epoch的种子
  269. >>> ds.config.set_seed(58)
  270. >>> # 使用大小为4的shuffle缓冲区创建打乱后的数据集。
  271. >>> dataset = dataset.shuffle(4)
  272. ..py:method:: skip(count)
  273. 跳过此数据集的前N个元素。
  274. **参数:**
  275. **count** (int) - 要跳过的数据集中的元素个数。
  276. **返回:**
  277. SkipDataset,减去跳过的行的数据集对象。
  278. **样例:**
  279. >>> # dataset是Dataset对象的实例
  280. >>> # 创建一个数据集,跳过前3个元素
  281. >>> dataset = dataset.skip(3)
  282. ..py:method:: split(sizes, randomize=True)
  283. 将数据集拆分为多个不重叠的数据集。
  284. 这是一个通用拆分函数,可以被数据处理流水线中的任何算子调用。
  285. 还有如果直接调用ds.split,其中 ds 是一个 MappableDataset,它将被自动调用。
  286. **参数:**
  287. - **sizes** (Union[list[int], list[float]]) - 如果指定了一列整数[s1, s2, …, sn],数据集将被拆分为n个大小为s1、s2、...、sn的数据集。如果所有输入大小的总和不等于原始数据集大小,则报错。如果指定了一列浮点数[f1, f2, …, fn],则所有浮点数必须介于0和1之间,并且总和必须为1,否则报错。数据集将被拆分为n个大小为round(f1*K)、round(f2*K)、...、round(fn*K)的数据集,其中K是原始数据集的大小。
  288. 如果舍入后:
  289. - 任何大小等于0,都将发生错误。
  290. - 如果拆分大小的总和<K,K - sigma(round(fi * k))的差值将添加到第一个子数据集。
  291. - 如果拆分大小的总和>K,sigma(round(fi * K)) - K的差值将从第一个足够大的拆分子集中删除,删除差值后至少有1行。
  292. - **randomize** (bool, optional):确定是否随机拆分数据(默认为True)。如果为True,则数据集将被随机拆分。否则,将使用数据集中的连续行创建每个拆分子集。
  293. .. note::
  294. 1. 如果要调用 split,则无法对数据集进行分片。
  295. 2. 强烈建议不要对数据集进行打乱,而是使用随机化(randomize=True)。对数据集进行打乱的结果具有不确定性,每个拆分子集中的数据在每个epoch可能都不同。
  296. **异常:**
  297. - **RuntimeError** - get_dataset_size返回None或此数据集不支持。
  298. - **RuntimeError** - sizes是整数列表,并且size中所有元素的总和不等于数据集大小。
  299. - **RuntimeError** - sizes是float列表,并且计算后存在大小为0的拆分子数据集。
  300. - **RuntimeError** - 数据集在调用拆分之前已进行分片。
  301. - **ValueError** - sizes是float列表,且并非所有float数都在0和1之间,或者float数的总和不等于1。
  302. **返回:**
  303. tuple(Dataset),拆分后子数据集对象的元组。
  304. **样例:**
  305. >>> # TextFileDataset不是可映射dataset,因此将调用通用拆分函数。
  306. >>> # 由于许多数据集默认都打开了shuffle,如需调用拆分函数,请将shuffle设置为False。
  307. >>> dataset = ds.TextFileDataset(text_file_dataset_dir, shuffle=False)
  308. >>> train_dataset, test_dataset = dataset.split([0.9, 0.1])
  309. ..py:method:: sync_update(condition_name, num_batch=None, data=None)
  310. 释放阻塞条件并使用给定数据触发回调函数。
  311. **参数:**
  312. - **condition_name** (str) - 用于切换发送下一行数据的条件名称。
  313. - **num_batch** (Union[int, None]) - 释放的batch(row)数。当 `num_batch` 为None时,将默认为 `sync_wait` 算子指定的值(默认为None)。
  314. - **data** (Any) - 用户自定义传递给回调函数的数据(默认为None)。
  315. ..py:method:: sync_wait(condition_name, num_batch=1, callback=None)
  316. 向输入数据集添加阻塞条件。 将应用同步操作。
  317. **参数:**
  318. - **condition_name** (str) - 用于切换发送下一行的条件名称。
  319. - **num_batch** (int) - 每个epoch开始时无阻塞的batch数。
  320. - **callback** (function) - `sync_update` 中将调用的回调函数。
  321. **返回:**
  322. SyncWaitDataset,添加了阻塞条件的数据集对象。
  323. **异常:**
  324. **RuntimeError** - 条件名称已存在。
  325. **样例:**
  326. >>> import numpy as np
  327. >>> def gen():
  328. ... for i in range(100):
  329. ... yield (np.array(i),)
  330. >>>
  331. >>> class Augment:
  332. ... def __init__(self, loss):
  333. ... self.loss = loss
  334. ...
  335. ... def preprocess(self, input_):
  336. ... return input_
  337. ...
  338. ... def update(self, data):
  339. ... self.loss = data["loss"]
  340. >>>
  341. >>> batch_size = 4
  342. >>> dataset = ds.GeneratorDataset(gen, column_names=["input"])
  343. >>>
  344. >>> aug = Augment(0)
  345. >>> dataset = dataset.sync_wait(condition_name="policy", callback=aug.update)
  346. >>> dataset = dataset.map(operations=[aug.preprocess], input_columns=["input"])
  347. >>> dataset = dataset.batch(batch_size)
  348. >>> count = 0
  349. >>> for data in dataset.create_dict_iterator(num_epochs=1, output_numpy=True):
  350. ... assert data["input"][0] == count
  351. ... count += batch_size
  352. ... data = {"loss": count}
  353. ... dataset.sync_update(condition_name="policy", data=data)
  354. ..py:method:: take(count=-1)
  355. 从数据集中获取最多给定数量的元素。
  356. .. note::
  357. 1. 如果count大于数据集中的元素数或等于-1,则取数据集中的所有元素。
  358. 2. take和batch操作顺序很重要,如果take在batch操作之前,则取给定行数;否则取给定batch数。
  359. **参数:**
  360. **count** (int, optional) - 要从数据集中获取的元素数(默认为-1)。
  361. **返回:**
  362. TakeDataset,取出指定数目的数据集对象。
  363. **样例:**
  364. >>> # dataset是Dataset对象的实例。
  365. >>> # 创建一个数据集,包含50个元素。
  366. >>> dataset = dataset.take(50)
  367. ..py:method:: to_device(send_epoch_end=True, create_data_info_queue=False)
  368. 将数据从CPU传输到GPU、Ascend或其他设备。
  369. **参数:**
  370. - **send_epoch_end** (bool, optional) - 是否将end of sequence发送到设备(默认为True)。
  371. - **create_data_info_queue** (bool, optional) - 是否创建存储数据类型和shape的队列(默认为False)。
  372. .. note::
  373. 如果设备为Ascend,则逐个传输数据。每次传输的数据大小限制为256M。
  374. **返回:**
  375. TransferDataset,用于传输的数据集对象。
  376. **异常:**
  377. **RuntimeError** - 如果提供了分布式训练的文件路径但读取失败。
  378. ..py:method:: to_json(filename='')
  379. 将数据处理流水线序列化为JSON字符串,如果提供了文件名,则转储到文件中。
  380. **参数:**
  381. **filename** (str) - 另存为JSON格式的文件名。
  382. **返回:**
  383. str,流水线的JSON字符串。
  384. ..py:method:: zip(datasets)
  385. 将数据集和输入的数据集或者数据集元组按列进行合并压缩。输入数据集中的列名必须不同。
  386. **参数:**
  387. **datasets** (Union[tuple, class Dataset]) - 数据集对象的元组或单个数据集对象与当前数据集一起合并压缩。
  388. **返回:**
  389. ZipDataset,合并压缩后的数据集对象。
  390. **样例:**
  391. >>> # 创建一个数据集,它将dataset和dataset_1进行合并
  392. >>> dataset = dataset.zip(dataset_1)