Ошибка сохранения и обслуживания модели в тензорном потоке - PullRequest
1 голос
/ 02 мая 2019

Как мне сохранить мою обученную модель, используя tf.saved_model.simple_save, чтобы я мог делать запросы, используя тензор потока-обслуживания

x = tf.placeholder(tf.float32, [None, 784])
y = tf.placeholder(tf.float32, [None, 10])
values = tf.placeholder(tf.float32, [None, 1])

layer = tf.add(tf.matmul(x, w), b)
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(labels=y, logits=layer))
optimize = tf.train.GradientDescentOptimizer(0.001).minimize(cross_entropy)
correct_pred = tf.equal(tf.argmax(layer, 1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))

with tf.Session() as sess:
  sess.run(init)
  for _ in range(10000):
    batch = mnist.train.next_batch(100)
    sess.run(accuracy, feed_dict={x:batch[0],y:batch[1]})

  !rm -rf "/model"
  export_dir = "/model/1"

  #Problem here
  tf.saved_model.simple_save(
      sess,
      export_dir=export_dir,
      inputs={"x":x},
      outputs={"accuracy":accuracy}
  )

Когда я бегу:

!saved_model_cli show --dir {export_dir} --all

I get:
MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['x'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 784)
        name: Placeholder:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['accuracy'] tensor_info:
        dtype: DT_FLOAT
        shape: ()
        name: Mean_1:0
  Method name is: tensorflow/serving/predict

Мой вывод имеет shape () вместо (-1, x) или такого формата. Когда я отправляю запрос, я не получаю ответ. Поскольку точность - это операция, я не получаю ответа. Как я могу изменить его на переменную или как я могу использовать {t.name для t в model.outputs}, который используется в keras?

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Проблема в последней строке кода, outputs={"accuracy":accuracy}.Проблема будет решена, если заменить accuracy на «слой».Итак, код может быть таким, как показано ниже:

tf.saved_model.simple_save(sess, export_dir=export_dir, inputs={"x":x},
outputs={"Predicted_Output":layer})
0 голосов
/ 14 мая 2019

Вывод в simple_save кажется неверным.Это должен быть слой, но не точность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...