我已经使用了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开始,使我很难做到这一点.但是他们也没有使用TFRecords或Queues.而且我不知道为什么要使用两个单独的模型.我尝试只构建一个,并使用Feed_dict来提供数据:一切正常.
自从我通常只使用一种模型.我的输入始终是place_holders,而我只输入培训或验证数据.
最近,我注意到使用tf.layers.dropout和tf.layers.batch_normalization的模型上有些奇怪的行为.这两个函数都有一个与tf.bool占位符一起使用的“训练”参数.我已经看到tf.layers通常与tf.estimator.Estimator一起使用,但是我没有使用它.我已经阅读了Estimators代码,它似乎为培训和验证创建了两个不同的图形.这些问题可能是由于没有两个单独的模型而引起的,但我仍然持怀疑态度.
是否有明确的原因我没有看到这意味着必须使用两个单独的等效模型?
解决方法:
您不必使用两个神经网络进行训练和验证.毕竟,正如您所注意到的,tensorflow通过允许将某些层的训练参数用作占位符来帮助您拥有一个整体的训练验证网络.
但是,为什么不呢?通过使用单独的网络进行培训和验证,您可以踏上正确的道路,并确保代码永不过时.您的训练和验证网络今天可能是相同的,但是您稍后可能会发现拥有不同的网络会有所好处,例如具有不同的输入,不同的输出,去除中间层等.
而且,由于变量之间是共享的,因此拥有独特的训练和验证网络几乎不会受到任何损失.
因此,保持一个单一的网络就可以了;以我的经验来看,除了有趣的实验之外,任何项目都可能在某个时候实施独特的验证网络,而tensorflow使得以最小的代价轻松做到这一点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。