Как исправить «Retval [0] уже был установлен» при обслуживании сохраненной модели - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть работающая SavedModel (т. Е. Сохраненная модель, которая работает при восстановлении в python), которая завершается ошибкой при запуске на службе tenorflow.Сообщение об ошибке на сервере:

OP_REQUIRES failed at function_ops.cc:68 : Internal: Retval[0] has already been set.
The REST API returns 500 and specifies the node on the graph:
[[{{node _retval_loop/concat_0_0}}]

Точные шаги для воспроизведения (https://drive.google.com/file/d/1at1CQ9iHgcPHCn-MkvSGcgtbVM2lrKJn/view) ссылка на сохраненную модель. Она может быть успешно восстановлена ​​и запущена в python, но выдает ошибку при запуске насервер модели. (принимает изображение в качестве входных данных:

sess.run(fetches=["loop/Exit_1:0"],feed_dict={"image_bytes:0": image})

Исходный код / ​​журналы Соответствующий исходный код (я надеюсь): (содержит цикл while с конкатом в теле)

val, idx =tf.nn.top_k(softmax ,name="topk")
sentence = tf.Variable([vocab.start_id],False,name="sentence",)
sentence = tf.concat([sentence, idx[0]], 0)#

def cond(sentence,state):
    return tf.math.not_equal( 
sentence[-1],tf.constant(vocab.end_id))

def body(sentence,state):
    input_seqs = tf.expand_dims([sentence[-1]], 1)

    seq_embeddings = tf.nn.embedding_lookup(self.embedding_map, 
input_seqs)
    embed = seq_embeddings

    # In inference mode, use concatenated states for convenient feeding and
    # fetching.
    state_feed = tf.concat(axis=1, values=state, name="state")

    # Placeholder for feeding a batch of concatenated states.
    # state_feed = tf.placeholder(dtype=tf.float32,
     #                             shape=[None, 
  sum(lstm_cell.state_size)],
       #                             name="state_feed")
    state_tuple = tf.split(value=state_feed, num_or_size_splits=2, axis=1)

    # Run a single LSTM step.
    lstm_outputs, new_state_tuple = lstm_cell(
        inputs=tf.squeeze(embed, axis=[1]),
        state=state_tuple)

    # Concatentate the resulting state.
    state = tf.concat(axis=1, values=new_state_tuple, name="state")

    # Stack batches vertically.

     lstm_outputs = tf.reshape(lstm_outputs, [-1, lstm_cell.output_size])

    with tf.variable_scope("logits") as logits_scope:
        logits = tf.contrib.layers.fully_connected(
        inputs=lstm_outputs,
        num_outputs=self.config.vocab_size,
        activation_fn=None,
        weights_initializer=self.initializer,
        scope=logits_scope, reuse = True
    )

     softmax = tf.nn.softmax(logits, name="softmax")
     self.softmax = softmax
     val, idx = tf.nn.top_k(softmax, name="topk")

     sentence = tf.concat([sentence,idx[0]],0)
     self.output = sentence
     return [sentence, state]
 out = tf.while_loop(cond, body, [sentence, state],parallel_iterations=1,maximum_iterations=20,name="loop",shape_invariants=[tf.TensorShape([None]),tf.TensorShape([None,None])])

 return out

завершается с ошибкой:

W external/org_tensorflow/tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES failed at function_ops.cc:68 : Internal: Retval[0] has already been set.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...