Разберите и отобразите диаграмму структуры сети из файла модели Tensorflow (модель CKPT).

TensorFlow

предыдущий пост«Разберите и отобразите диаграмму структуры сети из файла модели 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Часть содержимого файла показана ниже.

Часть файла 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После этого результат отображения выглядит следующим образом.

Чтение и отображение структуры графа модели CKPT

4 Адрес источника

GitHub.com/Цветы к 1001…