Подтвердить что ты не робот

Список имен тензоров в графе в Tensorflow

Объект графа в Tensorflow имеет метод, называемый "get_tensor_by_name (name)". Есть ли способ получить список допустимых имен тензоров?

Если нет, знает ли кто-нибудь правильные имена для предварительно подготовленной модели inception-v3 отсюда? Из их примера, pool_3, является одним действительным тензором, но список всех из них будет приятным. Я посмотрел на статью, о которой идет речь, и некоторые из слоев, похоже, соответствуют размерам в таблице 1, но не все из них.

4b9b3361

Ответ 1

Бумага не точно отражает модель. Если вы загружаете исходный код из arxiv, он имеет точное описание модели как model.txt, а имена там сильно коррелируют с именами в выпущенной модели.

Чтобы ответить на ваш первый вопрос, sess.graph.get_operations() предоставляет вам список операций. Для op, op.name дает вам имя и op.values() дает вам список тензоров, которые он производит (в модели начала-v3 все имена тензоров - это имя op с добавленным к нему ": 0", поэтому pool_3:0 - тензор, создаваемый окончательным пулом op.)

Ответ 2

Чтобы увидеть операции на графике (вы увидите много, поэтому, чтобы прервать, я привел здесь только первую строку).

sess = tf.Session()
op = sess.graph.get_operations()
[m.values() for m in op][1]

out:
(<tf.Tensor 'conv1/weights:0' shape=(4, 4, 3, 32) dtype=float32_ref>,)

Ответ 3

Вышеуказанные ответы верны. Я столкнулся с простым для понимания/простым кодом для вышеупомянутой задачи. Поэтому поделитесь им здесь: -

import tensorflow as tf

def printTensors(pb_file):

    # read pb into graph_def
    with tf.gfile.GFile(pb_file, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())

    # import graph_def
    with tf.Graph().as_default() as graph:
        tf.import_graph_def(graph_def)

    # print operations
    for op in graph.get_operations():
        print(op.name)


printTensors("path-to-my-pbfile.pb")

Ответ 4

Вам даже не нужно создавать сеанс, чтобы увидеть имена всех имен операций на графике. Для этого вам нужно просто взять график по умолчанию tf.get_default_graph() и извлечь все операции: .get_operations. Каждая операция имеет много полей, вам нужно имя.

Вот код:

import tensorflow as tf
a = tf.Variable(5)
b = tf.Variable(6)
c = tf.Variable(7)
d = (a + b) * c

for i in tf.get_default_graph().get_operations():
    print i.name

Ответ 5

В качестве вложенного списка:

tensor_names = [t.name for op in tf.get_default_graph().get_operations() for t in op.values()]

Функция для получения имен тензоров в графе (по умолчанию используется график по умолчанию):

def get_names(graph=tf.get_default_graph()):
    return [t.name for op in graph.get_operations() for t in op.values()]

Функция для получения тензоров в графе (по умолчанию используется график по умолчанию):

def get_tensors(graph=tf.get_default_graph()):
    return [t for op in graph.get_operations() for t in op.values()]