Python 如何在Tensorflow批次中将两个张量捆绑在一起?

Python 如何在Tensorflow批次中将两个张量捆绑在一起?,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我想创建一个损失,它是在重建X和tensorflow中标签y的函数的同时产生的。两者需要匹配,我正在使用tf.data.Dataset.batch()和渐变带,而不是像您通常使用的那样直接调用.fit(,batch=number)。为了解决这个问题,我想到了两种方法: 将X和Y捆绑为一个元组,并将该元组转换为tensorflow数据集,然后使用.batch() 只需将y固定在X张量的末端,然后使用.batch() 有没有标准的方法来实现这种事情?我不确定上述两种方法是否有问题,但第二种方法似乎至

我想创建一个损失,它是在重建X和tensorflow中标签y的函数的同时产生的。两者需要匹配,我正在使用
tf.data.Dataset.batch()
和渐变带,而不是像您通常使用的那样直接调用
.fit(,batch=number)
。为了解决这个问题,我想到了两种方法:

  • 将X和Y捆绑为一个元组,并将该元组转换为tensorflow数据集,然后使用
    .batch()
  • 只需将y固定在X张量的末端,然后使用
    .batch()
  • 有没有标准的方法来实现这种事情?我不确定上述两种方法是否有问题,但第二种方法似乎至少可以奏效,但我也想知道我是否已经大大简化了这个过程。目前我的x的数据加载设置如下所示:

    train_dataset = (tf.data.Dataset.from_tensor_slices(train_dataset)
                     .shuffle(len(training_ind))
                     .batch(bsize))
    
    我设想的是:

    train_x_dataset = tf.data.Dataset.from_tensor_slices(train_x)
    train_y_dataset = tf.data.Dataset.from_tensor_slices(train_y)
    
    train_datset = (tf.data.Dataset((train_x_dataset,train_y_dataset))
                         .shuffle(len(training_ind))
                         .batch(bsize))
    
    for train_x, train_y in train_dataset:
      loss(train_step(model, train_x, train_y, optimizer))
    

    这比我想象的要容易得多。基本上,我已经有了将两个数据集作为元组传递的基本想法,唯一的区别是在调用
    时必须传递这两个数据集。然后访问元素就和预期的差不多了

    train_dataset = tf.data.Dataset.from_tensor_slices((train_x,train_y))
    
    train_dataset = (train_dataset
                         .shuffle(n_obs)
                         .batch(bsize))
    
    for train_x, train_y in train_dataset:
      loss(train_step(model, train_x, train_y, optimizer))
    

    您可以使用来同时迭代两个数据集。这就是你所需要的吗?@jakub这看起来和我想做的差不多(祈求好运,它与批处理兼容)。我会玩一会儿,看看它是否管用,谢谢!