Во-первых, Windows (во всех ее воплощениях) является нестандартной ОС.
Linux (и большинство проприетарных unixen) являются стандартными операционными системами, совместимыми с POSIX.
The C библиотеки отражают эту дихотомию. Python отображает библиотеки C.
Для этого не существует «кросс-платформенного» способа. Вы должны взломать что-то с помощью ctypes для определенной версии Windows (XP или Vista)
Существует функция tf.Graph.get_tensor_by_name (). Например:
import tensorflow as tf
c = tf.constant([[1.0, 2.0], [3.0, 4.0]])
d = tf.constant([[1.0, 1.0], [0.0, 1.0]])
e = tf.matmul(c, d, name='example')
with tf.Session() as sess:
test = sess.run(e)
print e.name #example:0
test = tf.get_default_graph().get_tensor_by_name("example:0")
print test #Tensor("example:0", shape=(2, 2), dtype=float32)
Все тензоры имеют имена строк, которые вы можете видеть следующим образом
[tensor.name for tensor in tf.get_default_graph().as_graph_def().node]
Как только вы знаете имя, вы можете получить Тензор, используя <name>:0
(0 относится к конечной точке, которая несколько избыточна)
Например, если вы это сделаете
tf.constant(1)+tf.constant(2)
У вас есть следующие имена тензоров
[u'Const', u'Const_1', u'add']
Таким образом, вы можете получить вывод сложения как
sess.run('add:0')
Обратите внимание, что это часть, не входящая в открытый API. Автоматически созданные имена тензоров строковых объектов являются деталями реализации и могут меняться.
Scale1_first_relu
является скорее «предложением», а не фактическое имя. Это истинное имя в графе может иметь префикс, если он был создан внутри области или может иметь суффикс, автоматически добавленный для дедупликации. Просто напечатайте имя тензоров на графике, используя рецепт выше, и найдите тензоры, содержащие строку Scale1_first_relu
– Yaroslav Bulatov
14 April 2016 в 16:56
scale_1\Scale1_first_relu:0
, вы можете получить его значение с помощью session.run('scale_1\Scale1_first_relu:0')
– Yaroslav Bulatov
14 April 2016 в 23:36
e.name
, вы знаете, что имяexample:0
. Tensorflow добавляет:0
к указанному вами имени. – apfalz 6 July 2017 в 14:20get_tensor_by_name
, чтобы получить что-то, определенноеtf.layers.dense
, напримерmeans
в этом примере кода здесь . – ytutow 26 August 2017 в 02:44tf.variable_scopes
внутри функций python усложняет вопросы, но вы можете попробовать использоватьtf.get_collection(key, scope=None)
. В качестве альтернативы вы можете попробовать что-то вродеmean_vars = [i for i in tf.global_variables() if i.name.startswith('mean')]
или потенциальноmean_vars = [i for i in tf.global_variables() if 'mean' in i.name]
. Я не тестировал второй, поэтому никаких обещаний. Это даст вам полное имя, как это понимает tensorflow. Оттудаtf.get_tensor_by_name()
должен работать нормально. – apfalz 31 August 2017 в 16:22