【问题标题】:Pre-train neural networks in TensorFlow在 TensorFlow 中预训练神经网络
【发布时间】:2017-05-23 04:35:03
【问题描述】:

我正在训练一个深度神经网络。直接训练整个网络很困难,因此,我更喜欢逐层训练。首先,我训练一个具有单个隐藏层的网络。之后,我使用tf.train.Saver 保存模型。下一次,我通过调用来恢复变量:

saver.restore(sess, "runs/simple-model.ckpt")

当然,这次架构发生了变化,因为我在隐藏层和输出层之间插入了一个新层,并且使用了一个新变量。为此,Tensorflow 抛出错误:Key not found

我的问题是:如何在 Tensorflow 中逐层训练神经网络?我想在对整个网络进行最终微调之前完成它。 非常感谢。

【问题讨论】:

  • saver 构造函数接受要初始化的变量列表。所以你可以为 saver 指定现有变量,并手动初始化新变量
  • 是的,但 Tensorflow 似乎声称旧图中不存在新变量。我觉得 Saver 总是需要相同的架构。
  • 您可以通过查看图表 (tf.get_default_graph().as_graph_def()) 来仔细检查该变量是否存在于图表中。

标签: tensorflow neural-network deep-learning


【解决方案1】:

尝试使用共享权重定义整个网络。 不用对所有层进行训练,而是定义一个只运行您想要的层并最终保存整个网络的函数。

【讨论】:

    【解决方案2】:

    最后,我想出了一个简单的解决方案。在 Python 中,可以使用 numpy.save 轻松保存 numpy 数组。之后,我们可以通过:numpy.load 加载数组。因此,经过训练后,我可以使用var.eval() 评估变量,将其转换为numpy 数组,然后保存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 2010-11-20
      • 2019-09-15
      • 1970-01-01
      相关资源
      最近更新 更多