tensorflow 从数据库中读取数据

Posted

技术标签:

【中文标题】tensorflow 从数据库中读取数据【英文标题】:tensorflow reading data from database 【发布时间】:2017-06-18 11:49:42 【问题描述】:

我是张量流的新手。我的数据库中有大量数据,我想要一种方法来训练数据上的张量流模型。如果我将数据写入 csv 文件然后从 csv 读取数据,我了解如何执行此操作。 但是我如何直接从数据库中执行此操作。我可以从我的脚本(python)连接到数据库并运行 SQL 查询来检索数据,但是如果我想分批或分期学习并混合数据? 此外,数据太大而无法一次全部保存在内存中。 关于从哪里开始的任何提示? 谢谢

【问题讨论】:

是否有什么阻止您多次查询数据库?为什么不能只运行对您的情况有意义的任何大小限制的选择语句,然后从返回的行创建小批量?然后,在您对每一行运行 SGD 步骤后,运行另一个查询并创建更多小批量。也许我错过了您遇到的困难。 【参考方案1】:

让我们重申一下这个问题:

不可能将所有数据加载到内存中(即使数据已删除所有不需要的元数据) 不可能(出于技术或政策原因)先查询数据库,然后将结果作为 csv 文件保存到磁盘,然后再使用 csv 文件。

如果我们可以实现上述任何一个,那么我们就不会有问题了。我们被困在以某种方式查询数据库,我们想要:

以小块的形式获取数据

嗯,这很容易!假设我们的数据库有一个数字主键。只需决定您希望数据包含多少块并使用模数之类的函数

# for 7 batches
key % 7 == 0 gets you the first batch
key % 7 == 1 gets you the second batch
... etc

好的,所以你想添加另一个要求

随机小块获取数据

嗯,这并不太难。让我们改变选择 2 个随机数 X(最好是素数)和 Y(小于批次数)并做同样的事情,但就像这样

# for 7 batches
( key * X + Y ) % 7 == 0 gets you the first batch
( key * X + Y ) % 7 == 1 gets you the second batch
... etc

您手边没有素数列表吗?没问题,just get a whole bunch 随便挑一个。

对于下一个 epoch,使用不同的 X 和 Y,您将获得不同的批次。

【讨论】:

以上是关于tensorflow 从数据库中读取数据的主要内容,如果未能解决你的问题,请参考以下文章

TensorFlow的数据读取方法

tensorflow读取数据之CSV格式

TensorFlow高效读取数据的方法

TensorFlow高效读取数据的方法

『TensorFlow』数据读取类_data.Dataset

tensorflow读取数据