为什么我应该在张量流中构建单独的图进行训练和验证?

And*_*oti 3 python machine-learning cross-validation tensorflow tensorflow-estimator

我已经使用了tensorflow一段时间了。一开始我有这样的东西:

def myModel(training):
    with tf.scope_variables('model', reuse=not training):
        do model
        return model

training_model = myModel(True)
validation_model = myModel(False)
Run Code Online (Sandbox Code Playgroud)

主要是因为我从一些MOOC开始,使我很难做到这一点。但是他们也没有使用TFRecords或Queues。而且我不知道为什么要使用两个单独的模型。我尝试仅构建一个,并使用feed_dict:填充数据:一切正常。

自从我通常只使用一种模型。我的输入始终是place_holders,而我只输入培训或验证数据。

最近,我注意到在使用tf.layers.dropout和的模型上有一些奇怪的行为tf.layers.batch_normalization。这两个函数都有一个我与tf.bool占位符一起使用的“训练”参数。我已经看到tf.layers通常与一起使用tf.estimator.Estimator,但是我没有使用它。我已经阅读了Estimators代码,它似乎为培训和验证创建了两个不同的图形。这些问题可能是由于没有两个单独的模型而引起的,但我仍然持怀疑态度。

是否有明确的原因我没有看到这意味着必须使用两个单独的等效模型?

P-G*_*-Gn 6

你不具备使用两个神经网络训练和验证。毕竟,正如您所注意到的,张量流通过允许training某些层的参数作为占位符来帮助您拥有一个单轨的训练验证网络。

但是,为什么不呢?通过使用单独的网络进行培训和验证,您可以设定正确的道路并确保代码过时。您的训练和验证网络今天可能是相同的,但是稍后您可能会发现拥有不同的网络会有所好处,例如具有不同的输入,不同的输出,去除中间层等。

另外,由于变量之间是共享的,因此拥有独特的训练和验证网络几乎不会受到任何损失。

因此,保持单一网络是可以的;根据我的经验,除了有趣的实验之外,其他任何项目都可能在某个时候实施独特的验证网络,而tensorflow使得以最小的代价轻松做到这一点。