问题标签 [tensorflow-datasets]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 带有 ListDirectory 的 TensorFlow 数据集 API
我想使用 Tensorflow 数据集 API 为每个文件夹创建一批(每个文件夹包含图像)。我有以下简单的代码片段:
但是,tf.gfile.ListDirectory(在 parse_dir 中)需要一个普通字符串而不是张量。所以现在的错误是
有没有简单的方法来解决这个问题?
tensorflow - 如何使用 Dataset API 一次性从 TFRecord 文件中读取所有示例记录?
我正在使用 Spark 作业来生成一个TFRecord
文件,该文件将是我的(单词,计数)对的词汇文件。
我想使用 Dataset API 一次加载整个文件,因为我的词汇文件可能位于 HDFS 上,并且可能被拆分为多个物理文件。也就是说,我发现它非常不直观。到目前为止,这是我的代码:
使用一个巨大的、固定的预先批量大小是我能想到的在shape=(num_entries,)
. 它似乎也运行得很慢。
有没有更好的办法?
python - 如何在完整的验证示例中评估 Tensorflow 模型
我正在使用 Tensorflow 的 tf.estimator.DNNClassifier.evaluate 函数来评估我的网络。我正在使用位于此处的 Tensorflow 的 Iris 数据。经过一些进一步的调查和数学计算,我确定无论评估集大小如何,都会评估 128 个示例。
例如,iris_training.csv 只有 120 个示例,并且评估了 128 个(估计有 8 个被评估了两次)。我也有一些包含 1k 个示例的验证集,但在这种情况下也只评估了 128 个示例。
我通过将总损失除以平均损失来计算出这一点,以获得评估的示例数量。我希望能够任意改变这一点,尤其是在使用更大的验证集时。如何实现?
我已经尝试使用评估函数的 steps 参数 = 1、2、10、120 等......这会导致相同的 128 个示例被评估,而 steps = None 会导致函数永远不会返回。
我无法理解这个 128 指标的来源,即使在搜索了位于此处的 API 之后。我还研究了使用位于此处的类似 tf.contrib.learn.DNNClassifier 的估计器,但 API 声明该函数已弃用并将被删除,所以我认为这不是最佳选择。
我假设在此处找到另一个 SO 页面后,steps 参数不是我要寻找的。
那么,如何使用 Tensorflow 评估任意数量的验证示例?
python - 如何从 TFrecord 为 TensorFlow 中的训练网络创建批次?
我已将数据保存到 tfrecord 文件中。它有 1000 个样本和 2 个特征(一个是输入,另一个是输出)。输入是形状 [1,20] 和输出 [1,10]。它们都是从扁平的 numpy 数组创建的。我正在尝试从它们创建批次,以便我可以使用它们来训练我的网络,但我无法弄清楚如何。
这是我训练网络的代码
这是我从中获取数据的文件。
错误:
在看了其他问题之后,我在想也许我的批次应该是 ndarray 什么的?但我不知道如何将我的数据集变成那种形式。我什至无法弄清楚如何在没有迭代器的情况下使用我的数据。任何指导都会很棒!谢谢
tensorflow - tf.data.Dataset 中大量数据集的最佳数据流和处理解决方案
语境:
我的文本输入管道目前由两个主要部分组成:
我。复杂的文本预处理和导出tf.SequenceExamples
到 tfrecords(自定义标记化、词汇创建、统计计算、规范化以及整个数据集以及每个单独示例的更多)。对每个数据配置执行一次。
二.一个 tf.Dataset (TFRecords) 管道,在训练期间也进行了大量处理(string_split
字符、表查找、分桶、条件过滤等)。
原始数据集存在于多个位置(BigQuery、GCS、RDS...)。
问题:
问题在于,随着生产数据集的快速增长(数 TB),为每个可能的数据配置(第 1 部分有很多超参数)重新创建一个 tfrecords 文件是不可行的,因为每个文件都有数百 TB 的巨大大小。更不用说,当tfrecords 的大小增加时,tf.Dataset
读取速度会惊人地减慢。tf.SequenceExamples
有很多可能的解决方案:
- Apache Beam + Cloud DataFlow + feed_dict;
- tf.变换;
- Apache Beam + Cloud DataFlow + tf.Dataset.from_generator;
- 张量流/生态系统 + Hadoop 或 Spark
- tf.contrib.cloud.BigQueryReader
,但以下似乎都不能完全满足我的要求:
- 流式传输和处理来自 BigQuery、GCS、RDS 等的动态数据,如第一部分所述。
- 以一种或另一种方式直接发送数据(原型?)以
tf.Dataset
在第二部分中使用。 - 快速可靠的训练和推理。
(可选)能够预先计算选定部分数据的一些完整统计数据。
编辑: Python 3 支持会很棒。
tf.data.Dataset
管道最合适的选择是什么?在这种情况下,最佳实践是什么?
提前致谢!
tensorflow - TensorFlow Custom Estimator - 在 model_fn 发生微小变化后恢复模型
我tf.estimator.Estimator
用于开发我的模型,
我写了一个model_fn
并训练了 50,000 次迭代,现在我想对我model_fn
的 .
我不想从头开始训练,我想从 50,000 检查点恢复所有旧变量,并从这一点继续训练。当我尝试这样做时,我得到一个NotFoundError
如何做到这一点tf.estimator.Estimator
?
tensorflow - 使用 Estimators API 结合 tf.data.Dataset 时如何加快批量准备
我想加快使用 Estimator API 和 input_fn 编写的训练例程tf.data.Dataset
。
我的实现需要 2 秒来准备一批数据,然后在 GPU 上运行 1 秒训练,然后重新开始准备一批数据。这真的是低效的。
我正在寻找一种方法来异步准备批次并将它们上传到 GPU 以加快训练速度。或者,另一种方法是在调用之间缓存数据集input_fn
(这dataset.cache()
似乎不是一个好的选择,因为必须在每次 input_fn 调用时重新创建数据集)。
这是我的代码的简化版本:
我注意到 Estimator API 正在积极开发中,并且在 tensorflow 的主分支中 input_fn 已经可以返回数据集,所以也许我问得太早了,这个功能还没有准备好。但如果是这样,请提供可以跟踪此实施的票证。
python - 使用创建的 tensorflow 模型进行预测
我正在查看这篇 Tensorflow 文章的源代码,该文章讨论了如何创建一个广泛而深入的学习模型。https://www.tensorflow.org/versions/r1.3/tutorials/wide_and_deep
这是python源代码的链接:https ://github.com/tensorflow/tensorflow/blob/r1.3/tensorflow/examples/learn/wide_n_deep_tutorial.py
它的目标是训练一个模型,根据人口普查信息中的数据,该模型将预测某人的年收入是否超过或低于 50ka 美元。
按照指示,我正在运行此命令来执行:
我得到的结果如下:
在我在网上看到的各种文章中,它谈到了加载.ckpt
文件。当我查看我的模型目录时,我看到了这些文件:
我猜我会使用的是model.ckpt-1.meta
,对吗?
但我也对如何使用和提供这个模型数据感到困惑。我在 Tensorflow 的网站上看过这篇文章:https ://www.tensorflow.org/versions/r1.3/programmers_guide/saved_model
上面写着“请注意,Estimators 会自动保存和恢复变量(在 model_dir 中)。” (不确定在这种情况下这意味着什么)
我如何生成人口普查数据格式的信息,除了工资,因为这是我们应该预测的?对我来说,如何使用两篇 Tensorflow 文章以便能够使用经过训练的模型进行预测并不明显。
python - TensorFlow - 从 TFRecords 文件中读取视频帧
TLDR; 我的问题是如何从 TFRecords 加载压缩视频帧。
我正在建立一个数据管道,用于在大型视频数据集 ( Kinetics ) 上训练深度学习模型。为此,我正在使用 TensorFlow,更具体地说是tf.data.Dataset
和TFRecordDataset
结构。由于数据集包含约 30 万个 10 秒的视频,因此需要处理大量数据。在训练期间,我想从视频中随机采样 64 个连续帧,因此快速随机采样很重要。为了实现这一点,在训练期间可能会出现许多数据加载场景:
- 来自视频的样本。
ffmpeg
使用orOpenCV
和示例帧加载视频。不理想,因为在视频中搜索很棘手,并且解码视频流比解码 JPG 慢得多。 - JPG 图片。通过将所有视频帧提取为 JPG 来预处理数据集。这会生成大量文件,由于随机访问,这可能不会很快。
- 数据容器。将数据集预处理为
TFRecords
或HDF5
文件。需要做更多的工作来准备好管道,但很可能是这些选项中最快的。
我决定选择选项(3)并使用TFRecord
文件来存储数据集的预处理版本。然而,这也并不像看起来那么简单,例如:
- 压缩。将视频帧作为未压缩字节数据存储在 TFRecords 中将需要大量磁盘空间。因此,我提取所有视频帧,应用 JPG 压缩并将压缩字节存储为 TFRecords。
- 视频数据。我们正在处理视频,因此 TFRecords 文件中的每个示例都将非常大,并且包含多个视频帧(通常 250-300 用于 10 秒的视频,具体取决于帧速率)。
我编写了以下代码来预处理视频数据集并将视频帧写入 TFRecord 文件(每个文件大小约为 5GB):
这很好用;数据集很好地编写为 TFRecord 文件,帧为压缩的 JPG 字节。我的问题是,如何在训练期间读取 TFRecord 文件,从视频中随机采样 64 帧并解码 JPG 图像。
根据TensorFlow 的文档,tf.Data
我们需要执行以下操作:
有很多关于如何使用图像执行此操作的示例,这非常简单。但是,对于视频和帧的随机采样,我被卡住了。该tf.train.Features
对象将帧存储为frame/00001
等frame/000002
。我的第一个问题是如何从dataset.map()
函数内部随机采样一组连续帧?考虑因素是由于 JPG 压缩,每个帧都有可变数量的字节,需要使用tf.image.decode_jpeg
.
任何帮助如何最好地设置从 TFRecord 文件读取视频样本将不胜感激!
tensorflow - 如何让 tf.data.Dataset 在一次调用中返回所有元素?
有没有一种简单的方法可以在 a 中获取整个元素集tf.data.Dataset
?即我想将数据集的批量大小设置为我的数据集的大小,而无需专门传递元素的数量。这对于我想一次性测量整个数据集的准确性的验证数据集很有用。我很惊讶没有一种方法可以获取tf.data.Dataset