Список имен тензоров в графе в Tensorflow
Объект графа в Tensorflow имеет метод, называемый "get_tensor_by_name (name)". Есть ли способ получить список допустимых имен тензоров?
Если нет, знает ли кто-нибудь правильные имена для предварительно подготовленной модели inception-v3 отсюда? Из их примера, pool_3, является одним действительным тензором, но список всех из них будет приятным. Я посмотрел на статью, о которой идет речь, и некоторые из слоев, похоже, соответствуют размерам в таблице 1, но не все из них.
Ответы
Ответ 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()]