在TensorFlow中预训练神经网络

3

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

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

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

我的问题是:如何在Tensorflow中逐层训练神经网络?我想在进行最后的全网调优之前完成这个过程。 非常感谢。


1
saver 构造函数接受变量列表进行初始化。因此,您可以为 saver 指定现有变量,并手动初始化新变量。 - Yaroslav Bulatov
是的,但似乎Tensorflow声称新变量在旧图中不存在。我觉得Saver总是需要相同的架构。 - lenhhoxung
您可以通过查看图形(tf.get_default_graph().as_graph_def())来确认此变量是否存在于图形中。 - Yaroslav Bulatov
2个回答

1
尝试使用共享权重定义整个网络。而不是在所有层上进行训练,定义一个只运行所需层的函数,最后保存整个网络。

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接