Tensorflow tf.keras.Model如何区分tf.data.Dataset和TFRecords中的特征和标签?
我试图从CSV数据创建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知道在哪里分离功能和标签的地方吗?即,功能是输入,标签是目标 然而,在一
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])
}))