Tensorflow 网络冻结

0. 网络冻结概念:

神经网络模型中存在大量的权重,这些参数在模型训练的过程中通过反向传播来不断更新,所参数使用的是变量。 冻结网络就是将这些变量转换为常量。

Tensorflow的Checkpoint或者SavedModels格式均采用多文件的方式存储,包含了对推理无用的冗余信息。而我们推理时希望模型尽可能的简单。所以就希望冻结(freeze)模型。

Tensorflow提供了冻结脚本。可以把模型转换为冻结网络。

tensorflow/freeze_graph.py at master · tensorflow/tensorflow · GitHub

python3 freeze_graph.py --input_graph=some_graph_def.pb \
	--input_checkpoint=model.ckpt-8361242 \
	--output_graph=/tmp/frozen_graph.pb \
    	--output_node_names=softmax

Tensorflow训练的模型可以保存为ckpt格式或SaveModel。其中SaveModel与语言无关。

SavedModel时,将创建一个SavedModel目录,由assets目录,variables目录,saved_model.pb组成。

assets: 用于存放无侧室的辅助信息。

variables:存放变量信息。

saved_model.pb: 存放MaeGraphDef.

在Tensorflow2中,网咯冻结被弃用。但网络冻结的原理依然存在。

在OpenCV3中,加入了DNN模块,实现了一些基本的神经网络Layer。  之后又加入readNetFrom....()来加载模型。 但OpenCV不支持Tensorflow所推荐的SavedModel. 所以若要使用OpenCV DNN加载和推理,则模型首先要Freeze.

你可能感兴趣的:(tensorflow,tensorflow,深度学习,python)