【问题标题】:How to feed sequences to a TensorFlow Keras model?如何将序列提供给 TensorFlow Keras 模型?
【发布时间】:2019-02-25 19:01:18
【问题描述】:

我想训练一个模型,为可变大小的事件序列分配一些分数。每个序列都在自己的文件中,我从(文件名,目标分数)列表开始。

所以我做了这样的事情:

dataset = fileNames.map((fileName, score) => (new CsvDataset(x), score));

我得到的是:NotImplementedError : The Dataset.map() transformation does not currently support nested datasets as outputs

我使用的是 TensorFlow 1.10。

问题是:如何将(序列、训练分数)对加载并提供给模型? tf.data 是一种可行的方法吗?

【问题讨论】:

  • 显然不清楚,但fileNames 已经是Dataset
  • 那么你可以使用tf.data.Dataset.zip((dataset_x, dataset_y))
  • 问题不在于我不知道如何压缩两个数据集。问题是将包含 (1,) 张量(包含 csv 文件名)的 Dataset 转换为包含数据集的 Dataset,其中单个嵌套的 Dataset 包含相应文件的行。似乎.map 不支持。我应该将每个 .csv 文件转换为 Tensor 吗?
  • 您可以在您使用的任何数据集形状上使用tf.decode_csv。编辑后的答案,希望我理解正确。

标签: python tensorflow keras tensorflow-datasets


【解决方案1】:

您需要在使用 amy map 功能之前创建数据集对象。数据集 API 是一个非常可行的选择。

dataset = tf.contrib.data.make_csv_dataset(filenames)

此功能来自 1.10 版本。然后您可以使用dataset.zip((dataset, labels)) 添加标签,或使用dataset.map() 映射一些解析函数
更多关于这个 https://www.tensorflow.org/api_docs/python/tf/data/Dataset
https://www.tensorflow.org/versions/r1.10/api_docs/python/tf/contrib/data/make_csv_dataset

编辑1:

If you need to parse file by file you can do 
x = ['1.csv', '2.csv']
y = [label_1, labels_2]

def parse_csv_func(data, label):
    return tf.decode_csv(data, ['float32']*number_of_columns)

dataset = tf.data.Dataset.from_tensor_slices((x, y))
dataset = dataset.map(parse_csv_func)

输出:[b'1.csv'] label_1

此数据集对象将包含 csv 文件名和相应标签的路径,因此您可以将任何解析函数应用于您想要的单独文件。如果数据集是嵌套的,您可以将其展平。

【讨论】:

  • 看起来make_csv_dataset1.10 中非常糟糕。但是,在升级到1.12 并尝试make_csv_dataset(filenames) 之后,我相信这不是我想要的。您示例中的 dataset 最终只是我所有 .csv 文件中所有行的串联。我希望看到的是一个数据集,其中每个条目对应一个文件,并且有很多行。请看一下我试图用Dataset API 重现的以下伪 Python 代码:pastebin.com/SdNSmv1r
  • 我必须重申,我可能完全误解了我应该首先传递给 LSTM 的内容。
  • 但这正是我在这个问题中想要做的,我的parse_csv_func 基本上是另一个make_csv_dataset(但调用构造函数而不是工厂),只有一个文件名。
猜你喜欢
  • 1970-01-01
  • 2019-04-21
  • 2020-02-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 1970-01-01
  • 2018-09-28
  • 2018-10-14
相关资源
最近更新 更多