Tensorflow tf.keras.Model如何区分tf.data.Dataset和TFRecords中的特征和标签?

Tensorflow tf.keras.Model如何区分tf.data.Dataset和TFRecords中的特征和标签?,tensorflow,tensorflow2.0,tensorflow-datasets,tf.keras,Tensorflow,Tensorflow2.0,Tensorflow Datasets,Tf.keras,我试图从CSV数据创建tfrecords文件,然后我想使用tf.data.TFRecordDataset()从它们创建Dataset,然后将Dataset馈送到tf.keras.Model。(事实上,我正在使用Spark数据帧直接创建tfrecords文件。) 在中,参数x是输入数据。它可以是: 一个tf.data数据集。应返回其中一个(输入、目标)的元组 或(输入、目标、样本权重) 问题1:这是tf.keras.Model知道在哪里分离功能和标签的地方吗?即,功能是输入,标签是目标 然而,在一

我试图从CSV数据创建
tfrecords
文件,然后我想使用
tf.data.TFRecordDataset()
从它们创建
Dataset
,然后将
Dataset
馈送到
tf.keras.Model
。(事实上,我正在使用Spark数据帧直接创建
tfrecords
文件。)

在中,参数
x
是输入数据。它可以是:

一个tf.data数据集。应返回其中一个(输入、目标)的元组 或(输入、目标、样本权重)

问题1:这是
tf.keras.Model
知道在哪里分离功能和标签的地方吗?
即,功能是
输入
,标签是
目标

然而,在一些示例中,我在
tfrecords
文件或
tf.data.Dataset
的构建中看不到任何“元组”。比如下面


Q2:<强>那么,这是如何知道在哪里找到特征和在哪里找到标签的?< /强>为什么模型不会把“标签”作为数据特征?

您需要考虑完整的代码示例,即完成培训的其他文件等。主要功能是
parse_和_decode
函数,在该函数中解析TFRecords文件(如果没有这样的解析函数,则无法解释数据),并为每条数据返回一个元组
图像、标签
。然后在
create\u datasets
函数中将此函数映射到数据集上

因此,提供给
model.fit
的数据集实际上是一个元组数据集,据我所知,如果您提供一个
tf.data.dataset
作为
fit
函数的输入——一个元组数据集
输入、标签
,那么这正是模型将假定的。因此,第一个将作为模型的输入,第二个作为损失函数的目标

            feature={
                'image': _bytes_feature(data[i].tobytes()),
                'label': _int64_feature(labels[i])
            }))

这里,
image
label
是一个元组,其中image具有
byte
类型,标签具有
int64
类型。你可以读更多

谢谢!这是否意味着,无论我使用
tfrecords
文件或其他文件格式来创建
tf.data
数据集,我都应该使用类似于
dataset.map(self.\u parse\u and\u decode)
的东西来返回元组
输入、标签的数据集,然后再馈送到
Model.fit()
?之前我从
输入创建了
tf.data
数据集,通过
train\u dataset=tf.data.dataset.from\u tensor\u切片((train\u model\u input,train[target].to\u numpy())
,其中
train\u model\u input
是输入特性的记录:{name:numpy array}。它起作用了。这是一种错误的方法吗?
from_tensor_slices
的工作方式很好——就像在您的示例中,您可以直接给它一个元组。但是,
.tfrecords
文件是以字节格式保存的,需要首先对其进行解析/解释——解析函数的任务就是这样做。在某种程度上,此函数需要反转您在问题中发布的代码中的
tf.train.Example
编码内容。
# Read dataset from tfrecords
dataset = tf.data.TFRecordDataset(tfrecords_files)
            feature={
                'image': _bytes_feature(data[i].tobytes()),
                'label': _int64_feature(labels[i])
            }))