将 tf.data.Dataset 元组拆分为两个数据集

Split tf.data.Dataset tuple into two dataset

提问人:Justin 提问时间:11/5/2023 更新时间:11/5/2023 访问量:20

问:

我有成批的 3D tf.data.Dataset 用于训练,由于我的主系统需要这种方式,我需要将其拆分为 train_X 和train_Y。我使用以下方法进行拆分,但得到奇怪的结果。有人可以发表评论或提供帮助吗?我不擅长张量流。

datasetX = dataset1.map(lambda x,y : x)
datasetY = dataset1.map(lambda x,y : y)

此方法适用于简单的 tf.data.Dataset 元组,但在我的数据集上显示出奇怪的行为。

我创建了虚拟数据集,其格式与我的格式相同,如下所示。

import tensorflow as tf
import numpy as np

window_size = 4
batch_size = 5
shuffle_buffer_size = 1000
n_character=6
x_train_All=np.arange(0,window_size*batch_size*n_character)
x_train_All=np.reshape(x_train_All,(window_size*batch_size,n_character))


dataset = tf.data.Dataset.from_tensor_slices(x_train_All)
dataset = dataset.window(window_size + 1, shift=1, drop_remainder=True)
dataset = dataset.flat_map(lambda window: window.batch(window_size + 1))
dataset = dataset.map(lambda window: (window[:-1], window[1:]))
dataset1 = dataset.shuffle(shuffle_buffer_size)
datasetX = dataset1.map(lambda x,y : x)
datasetY = dataset1.map(lambda x,y : y)

dataset_Num_X=[]
dataset_Num_Y=[]
dataset_NumXAfterSplit=[]
dataset_NumYAfterSplit=[]

for element in dataset1.as_numpy_iterator():
    e,f=element
    dataset_Num_X.append(e)
    dataset_Num_Y.append(f)

for window in datasetX.as_numpy_iterator():
    g=window
    dataset_NumXAfterSplit.append(g)

for window in datasetY.as_numpy_iterator():
    g=window
    dataset_NumYAfterSplit.append(g)

根据设计,dataset_Num_X应与dataset_NumXAfterSplit相同,dataset_NumYAfterSplit应与dataset_Num_Y相同,但事实并非如此。任何帮助将不胜感激。

最好

python tensorflow 元组 训练数据 tf.data.dataset

评论


答: 暂无答案