在使用线程进行数据加载训练时,最有效的方法是在验证集上保存性能最佳的TensorFlow模型

时间:2016-10-24 14:21:13

标签: python multithreading tensorflow

好吧,在Torch ML中这很容易;)我正在按照标记示例进行线程加载数据 - https://indico.io/blog/tensorflow-data-input-part2-extensions/

所以,因为我找到了三种不喜欢的方法,我相信有更好的方法。

1)在两个不同的应用程序\ app \ run- tensorflow / models / image / cifar10 / cifar10_train.py和cifar10_eval.py

上训练和评估\验证

我不喜欢这个,因为我会浪费资源,即运行cifar10_eval.py的GPU。我可以从一个文件或应用程序执行此操作,但如果模型不是性能最佳的模型,则不喜欢保存!

2)使用权重共享创建验证模型 - tensorflow / models / image / mnist / convolutional.py

好多了,但我不喜欢我需要记住所有模型参数的事实,我确信有更好的方法在TensorFlow中共享参数,即我可以复制模型并说它是参数共享但是输入提要是不同的?

3)我目前正在使用的是tf.placeholder

但不能用这种方法做线程,即tf.RandomShuffleQueue。可能是我不知道如何通过这种方法来做。

那么,我该怎么做呢,线程加载训练数据并做一个训练时代然后使用这些权重再次进行线程加载验证数据并获得模型性能?

基本上,我说多线程加载训练和有效数据并保存最佳的形状模型。示例与torch- https://github.com/soumith/imagenet-multiGPU.torch

中的imagenet多GPU培训完全相似

非常感谢你!

1 个答案:

答案 0 :(得分:1)

变量共享方法可能是您想要的最简单方法。

看看"Sharing Variables" tutorial;通过使用tf.variable_scope()和tf.get_variable(),您可以重用变量,而无需显式管理共享。您可以在函数中定义模型,使用不同的参数调用它,但在两次调用之间共享模型变量。

还有便利层可以包含Tensorflow的变量管理。一个选项是Tensorflow Slim,这使得更容易定义某些类型的模型(尤其是卷积模型)。