TensorFlow中的预训练神经网络
我在训练一个深度神经网络。直接训练整个网络是很困难的,因此,我更喜欢分层训练。首先,我训练了一个具有单个隐藏层的网络。之后,我使用TensorFlow中的预训练神经网络,tensorflow,neural-network,deep-learning,Tensorflow,Neural Network,Deep Learning,我在训练一个深度神经网络。直接训练整个网络是很困难的,因此,我更喜欢分层训练。首先,我训练了一个具有单个隐藏层的网络。之后,我使用tf.train.Saver保存模型。下次,我将通过调用以下命令恢复变量: saver.restore(sess, "runs/simple-model.ckpt") 当然,这一次,架构发生了变化,因为我在隐藏层和输出层之间插入了一个新层,并使用了一个新变量。因此,Tensorflow会抛出一个错误:找不到键 我的问题是:如何在Tensorflow中逐层训练神经网络
tf.train.Saver
保存模型。下次,我将通过调用以下命令恢复变量:
saver.restore(sess, "runs/simple-model.ckpt")
当然,这一次,架构发生了变化,因为我在隐藏层和输出层之间插入了一个新层,并使用了一个新变量。因此,Tensorflow会抛出一个错误:找不到键
我的问题是:如何在Tensorflow中逐层训练神经网络?我想在对整个网络进行最终微调之前完成这项工作。
非常感谢。尝试使用共享权重定义整个网络。
与其在所有层上进行培训,不如定义一个只运行您想要的层的函数,并最终保存整个网络。最后,我找到了一个简单的解决方案。在Python中,可以使用
numpy.save
轻松保存numpy数组。之后,我们可以通过以下方式加载数组:numpy.load
。因此,培训后,我可以使用var.eval()
对变量求值,将其转换为numpy数组,然后保存。saver
构造函数接受要初始化的变量列表。因此,您可以为saver指定现有变量,并手动初始化新变量是的,但Tensorflow似乎声称旧图形中不存在新变量。我觉得Saver总是需要相同的体系结构。通过查看图形(tf.get\u default\u graph().as\u graph\u def()
),可以仔细检查图形中是否存在此变量。