不需要定义神经网络结构就可以恢复模型的两方法
前提:tf.train.import_meta_graph加载meta
saver = tf.train.import_meta_graph(os.path.join(model_fullpath,'model.ckpt-7.meta'))
第一种方法:在上一篇博客中就已经体现了;首先需要找到相关操作的变量名;
首先找到需要的变量的名称;比如我需要的一个网络节点名称为encode_run,需要一个placeholder;但需要在后面添加一个冒号和指定的第几个输出;后面这两个符号可以将节点变成tensor并取得对应的第几个输出;
这样可以正常输出;
如果分别改成1就会输出错误,如下所示:
第二种方法:
使用tf.tf.add_to_collection(),tf.get_collection和 tf.get_default_graph,graph.get_operation_by_name
train 部分:
X_placeholder=tf.placeholder(tf.float32,[None,feature_num],name="X_placeholder")
self.encode_op = tf.identity(self.encode_op, "encode_run")
tf.add_to_collection('encode_nn',self.encode_op)
预测部分:
encode=tf.get_collection('encode_nn')[0]
graph = tf.get_default_graph()
X=graph.get_operation_by_name('X_placeholder').outputs[0]
encoded_data=self.sess.run(encode,feed_dict={X:data})
最后两个方法都正常输出;而且结果一样;
提问:在检验预测结果与训练结果是否相同时,为什么会训练完成后最后两个预测结果与加载模型的预测结果不一样呢?
解答:因为训练完成时预测的结果是使用最后一次训练的参数;而加载的模型参数是训练过程中测试准确率最高的训练参数;所以结果不一样;
验证:将训练过程中的预测改为测试准确率最高时候的输出;如图所示:
输出结果对比:
训练时输出结果:
加载模型时输出结果:
结论:上述两种加载方法都是正确的;可以被使用;
阅读更多- tensorflow中保存模型、加载模型做预测(不需要再定义网络结构)
- Python基于numpy灵活定义神经网络结构的方法
- 深度学习基础模型算法原理及编程实现--04.改进神经网络的方法
- 模板方法模式(Template Method)-定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
- 神经网络模型符号解释!!!蛮重要的,记不住的可以参考下。
- 深入浅出Tensorflow(三):训练神经网络模型的常用方法
- 深入浅出Tensorflow(三):训练神经网络模型的常用方法
- 利用TensorFlow训练简单的二分类神经网络模型的方法
- 神经网络自然语言模型的一般化结构形式
- 综述论文:当前深度神经网络模型压缩和加速方法速览
- MatConvNet 网络模型结构可视化的方法
- 深入浅出Tensorflow(三):训练神经网络模型的常用方法
- 当前深度神经网络模型压缩和加速方法速览
- 综述:深度神经网络模型压缩和加速方法
- 单点神经网络(1):Perceptron模型定义
- Caffe(7)--神经网络模型结构可视化
- Caffe学习系列——工具篇:神经网络模型结构可视化
- 循环神经网络(RNN)中的LSTM和GRU模型的内部结构与意义
- Caffe学习系列——工具篇:神经网络模型结构可视化
- 当前深度神经网络模型压缩和加速方法速览