python — неверный аргумент: указанный в feed_devices или fetch_devices не был найден в графе

Я пытаюсь запустить модель, экспортированную из Keras в Tensorflow, используя C ++ API. Модель экспортируется и импортируется правильно, однако, когда я пытаюсь запустить сеанс в C ++, имена переменных, которые я передаю в Run член tensorflow::Session измениться, вызвав ошибку:

Invalid argument: Tensor Output0:0, specified in either feed_devices or fetch_devices was not found in the Graph

Вот модель, которую я построил в Керасе:

S = Input(shape=[state_size], name='Input')
h0 = Dense(self.HIDDEN1_UNITS, name='Hidden1', kernel_initializer=keras.initializers.RandomUniform())(S)
h0_a = Activation('relu')(h0)
h1 = Dense(self.HIDDEN2_UNITS, name='Hidden2', kernel_initializer=keras.initializers.RandomUniform())(h0_a)
h1_a = Activation('relu')(h1)
output = Dense(1)(h1_a)
output_a = Activation('tanh', name='Output0')(output)
model = Model(S,output_a)

Модель экспортируется с использованием tensorflow.python.framework.graph_util
а также tensorflow.python.framework.graph_ioследуя подходу, реализованному в https://github.com/amir-abdi/keras_to_tensorflow

Затем модель импортируется в Tensorflow с использованием API C ++:

ParseProtoUnlimited(&graph_def, <graph_protoprotobuffer>, <graph_size> );

График, кажется, успешно импортирован, фактически, когда я печатаю имя узла, содержащееся в графике в Tensorflow, я получаю следующее:

Names : Input_5
Names : Hidden1_5/kernel
Names : Hidden1_5/kernel/read
Names : Hidden1_5/bias
Names : Hidden1_5/bias/read
Names : Hidden1_5/MatMul
Names : Hidden1_5/BiasAdd
Names : activation_5_1/Relu
Names : Hidden2_5/kernel
Names : Hidden2_5/kernel/read
Names : Hidden2_5/bias
Names : Hidden2_5/bias/read
Names : Hidden2_5/MatMul
Names : Hidden2_5/BiasAdd
Names : activation_6_1/Relu
Names : dense_3_1/kernel
Names : dense_3_1/kernel/read
Names : dense_3_1/bias
Names : dense_3_1/bias/read
Names : dense_3_1/MatMul
Names : dense_3_1/BiasAdd
Names : Output_5/Tanh
Names : output0

Теперь, если я хочу попробовать запустить сеанс, я делаю следующее:

Tensor input(DT_FLOAT, TensorShape( { 4 }));
...
[init tensor]
...
session->Run({{"Input_5", input}}, {"Output0"}, {},
&outputs);

Но приложение выдает следующую ошибку:

Invalid argument: Tensor Output0:0, specified in either feed_devices or fetch_devices was not found in the Graph

Почему функция Run сеанса добавляет: 0 к выходному тензору, который я хочу получить?

Кроме того, я заранее попытался сделать это с помощью простого графика, построенного с помощью Tensorflow, и сессия на C ++ прошла без проблем. Вот график, который работал:

with tf.Session() as sess:
a = tf.Variable(5.0, name='a')
b = tf.Variable(6.0, name='b')
c = tf.multiply(a, b, name="c")
sess.run(tf.global_variables_initializer())
exported = sess.graph_def.SerializeToString()
size = sess.graph_def.ByteSize()
Tensor a(DT_FLOAT, TensorShape());
a.scalar<float>()() = 5.0;

Tensor b(DT_FLOAT, TensorShape());
b.scalar<float>()() = 6.0;

std::vector<std::pair<string, tensorflow::Tensor>> inputs = {
{ "a", a }, { "b", b }, };

std::vector<tensorflow::Tensor> outputs;
Run the session, evaluating our "c" operation from the graph
status = session->Run(inputs, { "c" }, { }, &outputs);

Почему во втором случае мне удается запустить сеанс, тогда как в первом случае я получаю эту ошибку?

Керас версия 2.2.2
Версия Tensorflow есть 1.11.0

Любая помощь приветствуется.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]