предыдущий пост«Разберите и отобразите диаграмму структуры сети из файла модели Tensorflow (модель pb)»как добраться изpb
Схема структуры сети извлекается из файла модели и визуализируется.В этой статье описывается, какCKPT
Схема структуры сети извлекается из файла модели и визуализируется. Теоретически, поскольку это может бытьpb
Извлеките диаграмму структуры сети из файла модели,CKPT
Файлы модели естественно не проблема, но будут некоторые проблемы.
1 Анализ сетевой структуры CKPT
РазобратьCKPT
Первым шагом в сетевой структуре является чтениеCKPT
Файл диаграммы в модели, получить диаграммуGraph
После объекта можно получить полную структуру сети. Пример кода для чтения графического файла показан ниже.
saver = tf.train.import_meta_graph(ckpt_path+'.meta',clear_devices=True)
graph = tf.get_default_graph()
with tf.Session( graph=graph) as sess:
sess.run(tf.global_variables_initializer())
saver.restore(sess,ckpt_path)
перечислитьgraph.get_operations()
После этого можно получить все вычислительные узлы текущего графа.Operation
объект сTensor
Отношение взаимной ссылки между объектами может вывести структуру сети. Однако следует отметить, что сmeta
При получении вычислительных узлов в графе, импортированном в файл, возникают следующие проблемы.
Содержит все узлы для расчета обратного градиентного спуска. Некоторые вычислительные узлы разделены на несколько вычислительных узлов в соответствии с базовыми вычислительными узлами (сложение, вычитание, умножение и деление и т. д.), например,BatchNorm
, но на самом деле может быть напрямую объединен в узел.
pb
Файл модели может избежать первой описанной выше проблемы, добавивCKPT
поворот моделиpb
После модели вычислительные узлы, связанные с обратным градиентным спуском, могут быть автоматически удалены. Для второго пункта,pb
Файл модели автоматически сформирует базовый расчет в расчетный узел, но такие функции, как Slice, не могут быть объединены для операций Tensor. Итак, по 2-му вопросуCKPT
поворот моделиpb
После модели таких проблем можно уменьшить, но нельзя избежать. Полностью избежать этого можно, только нацелившись на себя. После проведенного анализа делается вывод о том, что крайне необходимоCKPT
поворот моделиpb
Модель.
2 Автоматически преобразовывать CKPT в pb и извлекать узлы в сетевом графе
Если CKPT автоматически преобразуется в модель pb, то предыдущую статью можно использовать повторно.«Разберите и отобразите диаграмму структуры сети из файла модели Tensorflow (модель pb)»код. Пример кода показан ниже.
def read_graph_from_ckpt(ckpt_path,input_names,output_name ):
saver = tf.train.import_meta_graph(ckpt_path+'.meta',clear_devices=True)
graph = tf.get_default_graph()
with tf.Session( graph=graph) as sess:
sess.run(tf.global_variables_initializer())
saver.restore(sess,ckpt_path)
output_tf =graph.get_tensor_by_name(output_name)
pb_graph = tf.graph_util.convert_variables_to_constants( sess, graph.as_graph_def(), [output_tf.op.name])
with tf.Graph().as_default() as g:
tf.import_graph_def(pb_graph, name='')
with tf.Session(graph=g) as sess:
OPS=get_ops_from_pb(g,input_names,output_name)
return OPS
где функцияget_ops_from_pb
в предыдущей статье«Разберите и отобразите диаграмму структуры сети из файла модели Tensorflow (модель pb)»был реализован.
3 тест
от«Использование официальной модели предварительного обучения MobileNet V1»Взяв в качестве примера структуру сети MobileNet V1, представленную в этой статье, после загрузки файла MobileNet_v1_1.0_192 и его сжатия мы получаемmobilenet_v1_1.0_192.ckpt.data-00000-of-00001
,mobilenet_v1_1.0_192.ckpt.index
,mobilenet_v1_1.0_192.ckpt.meta
документ. нам еще нужно знатьmobilenet_v1_1.0_192.ckpt
Соответствующий вход и выход моделиTensor
Имя объекта не указано в официальном сжатом файле пакета. Один из способов — запустить официальный код и вывести имя входного тензора. Но запуск самого официального кода требует определенного времени и усилий, как описано в предыдущей статье.«Разберите и отобразите диаграмму структуры сети из файла модели Tensorflow (модель pb)»Кодовая реализация исходной сетевой структуры была реализована для записи строки, соответствующей исходной сетевой структуре, вori_network.txt
в файле. Таким образом, вы можете заполнить входное имя и выходное имя по желанию, а затем сгенерироватьori_network.txt
После файла можно визуально увидеть исходную сетевую структуру из файла.ori_network.txt
Часть содержимого файла показана ниже.
Из этого файла видно, что вводTensor
называется:batch:0
, выводTensor
Имя:MobilenetV1/Predictions/Reshape_1:0
. С этой информацией вызовите функциюread_graph_from_ckpt
Получить объект списка узлов статического графаops
,функция вызоваgen_graph(ops,"save/path/graph.html")
После этого в каталогеsave/path
Залезайgraph.html
файл, открытьgraph.html
После этого результат отображения выглядит следующим образом.