надеюсь, кто-нибудь может мне помочь. Я не нашел ответа на свою проблему с помощью Google или этого сайта.
Я пытаюсь получить доступ к оптимизатору TesorFlow по имени. Вот небольшой пример кода:
импорт системы
импортировать NumPy как NP
импортировать тензор потока как тф
print( "Python version: {0}".format(sys.version) )
print( "Tensorflow version: {0}".format(tf.__version__) )
print('')
l_input = tf.placeholder(tf.float32, shape=(None, 2), name='input')
l_dense = tf.layers.dense(l_input, units=1, activation=None)
l_output = tf.identity(l_dense, name='output')
l_true = tf.placeholder(tf.float32, shape=(None, 2), name='true')
cost = tf.reduce_sum(tf.square(l_output - l_true),name='cost')
train_step = tf.train.AdamOptimizer(0.001,name='train_step').minimize(cost)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print( "cost" )
print( cost )
print( "cost:0" )
print( tf.get_default_graph().get_tensor_by_name("cost:0") )
print('')
print( "train_step" )
print( train_step )
print( "type(train_step)" )
print( type(train_step) )
print( "collection train_step:0" )
print( tf.get_default_graph().get_collection("train_step:0") )
print( "operation train_step:0" )
print( tf.get_default_graph().get_operation_by_name("train_step:0") )
print( "tensor train_step:0" )
print( tf.get_default_graph().get_tensor_by_name("train_step:0") )
со следующим выводом:
Python version: 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)]
Tensorflow version: 1.8.0
cost
Tensor("cost:0", shape=(), dtype=float32)
cost:0
Tensor("cost:0", shape=(), dtype=float32)
train_step
name: "train_step"
op: "NoOp"
....
type(train_step)
<class 'tensorflow.python.framework.ops.Operation'>
collection train_step:0
[]
operation train_step:0
Итак, это работает на тензор стоимости. Однако я не могу заставить его работать с операцией train_step. Почему я попробовал get_collection? Это единственная найденная мной функция, которая не будет вызывать исключение.
Поскольку типом является операция, я попытался get_operation_by_name и в итоге получил исключение
....
ValueError: Name 'train_step:0' appears to refer to a Tensor, not a Operation.
Комментируя это и используя get_tensor_by_name, я получаю следующее исключение
....
KeyError: "The name 'train_step:0' refers to a Tensor which does not exist. The operation, 'train_step', exists but only has 0 outputs."
Я хотел бы загрузить сохраненный график и продолжить обучение, вызвав sess.run () на train_step. Для этого, однако, мне нужно как-то получить доступ к операции train_step. Я нашел более старые примеры, которые используют get_tensor_by_name, но они перестали работать с тем же исключением.
Любая помощь очень ценится.