python - 为什么要在 tensorflow 中构建用于训练和验证的分离图?

标签 python tensorflow machine-learning cross-validation 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)

主要是因为我从一些 MOOC 开始,这些类(class)促使我这样做。但他们也没有使用 TFRecords 或队列。而且我不知道为什么要使用两个不同的模型。我尝试只构建一个并使用 feed_dict 提供数据:一切正常。

从那以后,我通常只使用一种型号。我的输入始终是 place_holders,我只是输入训练或验证数据。

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

有没有明确的理由我没有看到这意味着必须使用两个独立的等价模型?

最佳答案

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

但是,你为什么不呢?通过使用单独的网络进行训练和验证,您可以走上正确的道路并让您的代码面向 future 。您的训练和验证网络今天可能是相同的,但您以后可能会发现拥有不同网络的一些好处,例如具有不同的输入、不同的输出、移除中间层等。

此外,由于变量在它们之间共享,因此拥有不同的训练和验证网络几乎不会受到任何惩罚。

所以,只保留一个网络就可以了;不过,根据我的经验,除了有趣的实验之外,任何项目都可能在某个时候实现不同的验证网络,而 tensorflow 可以轻松做到这一点,而且代价最小。

关于python - 为什么要在 tensorflow 中构建用于训练和验证的分离图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49155206/

相关文章:

python - 正则表达式从字符串python中提取三个字符

python - 如何在 findall() 函数返回的列表上运行 sub() 函数?

TensorFlow:读取卡住的模型,添加操作,然后保存到新的卡住模型

machine-learning - 杰弗里·辛顿 (Geoffrey Hinton) 的胶囊网络如何运作?

python - 从列表中删除元素,而其他列表不会重置

python - redis-py 订阅在读取消息时被阻塞

python - Tensorflow:尝试迁移学习时出错:无效的 JPEG 数据或裁剪窗口

python - 用 LIME 解释 CNN (Keras) 输出

matlab - Weka 多层感知器分类器输出到代码

python - 内置函数用于 python 中的视觉单词编码包