我有一个巨大的训练CSV文件(709M)和一个大型测试CSV文件(125M),我想DNNClassifier
在使用高级Tensorflow API的上下文中发送到该文件.
似乎input_fn
param接受fit
并且evaluate
必须在内存中保存所有功能和标签数据,但我现在想在我的本地计算机上运行它,因此如果我将这些文件读入内存并且因此它会很快耗尽内存然后处理它们.
我浏览了关于数据流式读取的文档,但是用于读取CSV的示例代码似乎是针对低级别的Tensorflow API.
并且 - 如果你原谅了一些抱怨 - 对于将训练有素的训练和测试数据文件发送到Estimator
...... 的微不足道的用例来说似乎过于复杂......尽管,培训实际上可能需要这种复杂程度并在Tensorflow中测试大量数据?
在任何情况下,我都非常感谢使用高级API的方法,如果它甚至可能,我开始怀疑.
在探索之后,我确实找到了DNNClassifier#partial_fit
,并试图用它进行训练.
如何使用这种方法的例子可以节省一些时间,但希望我会在接下来的几个小时内偶然发现正确的用法.
然而,似乎没有相应的DNNClassifier#partial_evaluate
...虽然我怀疑我可以将测试数据分解成更小的部分并DNNClassifier#evaluate
在每个批次上连续运行,这实际上可能是一个很好的方法,因为我可以分段将测试数据分组到队列中,从而获得每队列的准确性.
====更新====
精简版:
DomJack的建议应该是公认的答案.
但是,我的Mac的16GB RAM足以将整个709Mb的训练数据集保存在内存中而不会崩溃.因此,虽然在最终部署应用程序时我将使用DataSet功能,但我还没有将它用于本地开发工作.
更长的版本:
我开始使用partial_fit
如上所述的API,但在每次使用时都会发出警告.
所以,我去看看这里的方法的源代码,并发现它的完整实现如下所示:
logging.warning('The current implementation of partial_fit is not optimized'
' for use in a loop. Consider using fit() instead.')
return self.fit(x=x, y=y, input_fn=input_fn, steps=steps,
batch_size=batch_size, monitors=monitors)
Run Code Online (Sandbox Code Playgroud)
......让我想起了Hitchhiker's Guide的这个场景:
Arthur Dent:如果按此按钮会怎样?
福特Prefect:我不会 -
Arthur Dent:哦.
福特知府:发生了什么?
Arthur …